如何将JSON数据发布到Action方法?

时间:2013-04-03 17:23:04

标签: jquery .net asp.net-mvc-4

我正在POST到服务器(.Net),我无法将数组传递给控制器​​操作。我已经尝试了几乎所有可能的组合而没有任何运气。然而,其中一个令我困惑。

如果我执行此请求:

var dataArray = [ { /* some plain object */ }, { /* another plain object */ ], ... ];

$.ajax(url, {
   type: "post",
   data: { models: dataArray }
});

产生的请求数据如

models[0][property1]:value1
models[0][property2]:value2
...
models[1][property1]:value3
models[0][property2]:value4
...

不幸的是,.Net MVC4并不理解该请求。关注相关的SO question后我尝试了traditional: true,但发送到服务器的请求如下所示:

models:[object Object]

显然,它不是发送对象,而是发送字符串"[object Object]"。这有什么问题?我是否注定要为涉及非原始参数的每个请求发送序列化字符串(并且必须在服务器端手动反序列化它们)?

注意:这是我的操作方法。至于现在,我尝试的一切都会导致

  1. 参数是一个大小正确的数组,但每个项目都是一个新的未修改(空)对象或
  2. 参数为空

    [HttpPost]
    public ActionResult UpdateModels(Models.SimpleModel[] models)
    

2 个答案:

答案 0 :(得分:2)

尝试将JSON.stringify用于JSON.stringify(dataArray)

等数组

更新

如果我们在使用ajax调用时使用stringify,MVC3会自动将字符串数据转换为.NET对象。我认为MVC4应该是这样的。

更新2
将contentType属性设置为application / json;字符集= UTF-8

答案 1 :(得分:2)

示例JQuery

var MyConnectionList = {
    ColorList: []
};

function SendStream() {
    MyConnectionList.ColorList.push({
        "Name": 'Test1',
        "Color": 'red'
    });

    MyConnectionList.ColorList.push({
        "Name": 'Test2',
        "Color": 'Green'
    });

    $.ajax({
        url: url,
        data: JSON.stringify(MyConnectionList),
        async: true,
        type: 'POST',
        beforeSend: function (xhr, opts) {
        },
        contentType: 'application/json; charset=utf-8',
        complete: function () {  },
        success: function (data) {
        }
    });
}

样本控制器

public ActionResult SendStream(List<Sample> ColorList)
{
    return null;
}