我正在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]"
。这有什么问题?我是否注定要为涉及非原始参数的每个请求发送序列化字符串(并且必须在服务器端手动反序列化它们)?
注意:这是我的操作方法。至于现在,我尝试的一切都会导致
参数为空
[HttpPost]
public ActionResult UpdateModels(Models.SimpleModel[] models)
答案 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;
}