当我像这样使用 jQuery 发送 int 列表时:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
然后 jQuery 将转换 pkList 对象并通过 post 发送它,如下所示:
pkList[]:1
pkList[]:2
pkList[]:3
如果服务器是 PHP,但我使用 Asp.NET MVC3 并尝试使用默认模型绑定(bind)器获取这些值,那就没问题了:
public ActionResult Execute(ICollection<int> pkList)
但是pkList始终为null,看来默认的模型绑定(bind)器无法绑定(bind)它。
如何正确解决这个问题?
<小时/>添加 解决方案
我使用了 Darin Dimitrov 的解决方案,在 jQuery 中设置了traditional
选项:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
现在 jQuery 不再将 []
添加到参数中,它们的发送方式如下:
pkList:1
pkList:2
pkList:3
MVC 默认模型绑定(bind)器正确获取值。
希望这对某人有帮助。
最佳答案
您可以使用 JSON 请求,因为它允许您发送您想要的任何复杂对象:
$.ajax({
url: '@Url.Action("Execute")',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ pkList: [1, 2, 3] }), // you could throw any javascript object you like here
success: function(result) {
// process the results
}
});
JSON.stringify
方法是在现代浏览器中内置的,如果您想支持旧版浏览器,您可以包含 json2.js脚本到您的网站。
要回答您的问题,您可以使用设置 traditional: true
选项来指示 jQuery 回退到传统参数序列化,因为这在 jQuery 1.4 中已发生变化,并且如果您使用的是更高版本,您可以切换回参数序列化的方式:
$.ajax({
url: '@Url.Action("Execute")',
type: 'POST',
data: {
pkList: [1, 2, 3]
},
traditional: true
});
关于jquery - 如何使用 jQuery 将 int 列表发送到 ASP.net MVC 默认模型绑定(bind)器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931832/