0

我正在向服务器 (.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 问题traditional: true之后,但发送到服务器的请求如下所示:

models:[object Object]

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

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

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

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

2 回答 2

2

尝试使用JSON.stringify类似的数组JSON.stringify(dataArray)

更新

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

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

于 2013-04-03T17:34:36.883 回答
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;
}
于 2013-04-03T17:39:01.227 回答