asp.net-mvc – ASP.NET mvc 4控制器参数始终为空时发送json到控制器,为什么?

有一些类似的帖子已经在这里,并尝试每个解决方案建议,仍然不工作…我无法获得控制器内的价值,它总是为空.下面是代码.我错过了什么吗?

客户端javascript

function getChart() {
       JSONString3 = { HAxis : [{ Name : "monday" }] };
       jQuery.ajaxSettings.Traditional = true;
        $.ajax({
            url: "@Url.Action("getChart","SBM")",type: 'POST',contentType: 'json',dataType: 'html',data: JSONString3,success: function (data) {
                var imagestring = btoa(data);
                $('#Chartimage').attr('src',"data:image/png;base64," + imagestring + "?" + new       Date().getTime());
            }
        })
        jQuery.ajaxSettings.Traditional = false;
    }

MVC控制器

[Authorize]
    [HttpPost]
    public ActionResult getChart(YAxis HAxis)
    {
        YAxis XAxisvalue = HAxis;
        Charts chart = new Charts();
        MemoryStream ms = new MemoryStream();
        chart.Chart.SaveImage(ms);
        string image = Convert.ToBase64String(ms.GetBuffer());
        return File(ms.GetBuffer(),"image/png","Chart.png");
    }

模型

public class YAxis
{
    public string Name { get; set; }
}

解决方法

谢谢各位的指导和解决方案.该解决方案是您的所有建议的组合,所以我决定在一个帖子中进行整理.

解决问题的方法如下:

> contentType应该是application / json(如上面提到的Ant P)
> json数据应该是JSONString3 = {“Name”:“monday”}的形式(如上所述Ant P)
>发送给控制器之前,json应该被字符串化如下:JSONString3 = JSON.stringify(JSONString3)(如Quan建议)

客户端javascript

function getChart() {
               JSONString3 = { "Name" : "monday" };
               jQuery.ajaxSettings.Traditional = true;
                $.ajax({
                    url: "@Url.Action("getChart",contentType: 'application/json',data: JSON.stringify(JSONString3),success: function (data) {
                        var imagestring = btoa(data);
                        $('#Chartimage').attr('src'," + imagestring + "?" + new       Date().getTime());
                    }
                })
                jQuery.ajaxSettings.Traditional = false;
    }

MVC控制器

[Authorize]
[HttpPost]
public ActionResult getChart(YAxis HAxis)
{
    YAxis XAxisvalue = HAxis;
    Charts chart = new Charts();
    MemoryStream ms = new MemoryStream();
    chart.Chart.SaveImage(ms);
    string image = Convert.ToBase64String(ms.GetBuffer());
    return File(ms.GetBuffer(),"Chart.png");
}

模型

public class YAxis
{
    public string Name { get; set; }
}

而不是这样:

JSONString3 = { "Name" : "monday" };

我们做得到:

var JSONString3 = {};
JSONString.Name = "monday";

但是我们还需要在发布给控制器之前对对象进行字符串化

To pass multiple objects to controller,below is the example

客户端javascript

function getChart() {

        //first json object
        //note: each object Property name must be the same as it is in the Models classes on    server side
        Category = {};
        Category.Name = "Category1";
        Category.Values = [];
        Category.Values[0] = "CategoryValue1";
        Category.Values[1] = "CategoryValue2";

        //second json object
        XAxis = {};
        XAxis.Name = "XAxis1";
        XAxis.Values = [];
        XAxis.Values[0] = "XAxisValue1";
        XAxis.Values[1] = "XAxisValue2";

        //third json object
        YAxis = {};
        YAxis.Name = "YAxis1";

        //convert all three objects to string
        //note: each object name should be the same as the controller parameter is!!
        var StringToPost = JSON.stringify({CategoryObject : Category,XAxisObject : XAxis,YAxisObject : YAxis});

        $.ajax({
            url: "@Url.Action("getChart",contentType: "application/json",data: StringToPost,success: function (data) {
                var imagestring = btoa(data);
                $('#Chartimage').html(data);
            }
        })
    }

MVC控制器

[HttpPost]
public ActionResult getChart(Category CategoryObject,XAxis XAxisObject,YAxis YAxisObject)
{
    //do some stuff with objects here and return something to client
    return PartialView("_Chart");
}

类别模型

public class Category
{
    public string Name { get; set; }
    public List<string> Values { get; set; }
}

XAxis模型

public class XAxis
{
    public string Name { get; set; }
    public List<string> Values { get; set; }
}

YAX模型

public class YAxis
{
    public string Name { get; set; }
}

希望能帮助人澄清整个画面!

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....