我的c#代码中有这个类:
public class MyItem
{
public int LocationId { get; set; }
public int Value { get; set; }
public int ddlId { get; set; }
}
这是我的Js / Ajax代码:
var array = new Array();
grid.forEachRow(function (id) {
var object = {
LocationId: id,
Value: someValue,
ddlId: otherValue
};
array.push(object);
});
$.ajax({
type: "POST",
url: "/MyController/SaveTheList",
data: { myList: array },
success:function() { }
});
这是控制器中的方法:
[HttpPost]
public ActionResult SaveTheList(List<MyItem> myList)
{ }
该方法被命中,myList具有确切的长度,但是对象中的所有值都是0.。
答案 0 :(得分:1)
我建议您使用fiddler(或类似的)检查POST主体中的AJAX请求中发送的数据到底是什么,
东西告诉我
data:{myList:array}
看起来像“Object#1,Object#2,Object#3” 因为jQuery将如何尝试序列化你的对象数组
作为解决方案尝试将youj jQuery请求上的数据作为JSON字符串传递,而MVC binder应该能够绑定数据;
答案 1 :(得分:1)
在此之前:
$.ajax({
type: "POST",
url: "/MyController/SaveTheList",
data: { myList: array },
success:function() { }
});
使用它:
$.ajaxSetup({ traditional:true });
我遇到了同样的问题而且对我有用。
答案 2 :(得分:0)
您可以将其作为JSON
请求发送,并且您应该stringify
您的数据:
$.ajax({
type: "POST",
url: "/MyController/SaveTheList",
contentType: 'application/json',
data: JSON.stringify({ myList: array }),
success: function (result) {
}
});