Mar*_*arc 16 jquery defaultmodelbinder asp.net-mvc-3
当我用jQuery发送一个int列表时,如下所示:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Run Code Online (Sandbox Code Playgroud)
然后jQuery将转换pkList对象并通过post发送它,如下所示:
pkList[]:1
pkList[]:2
pkList[]:3
Run Code Online (Sandbox Code Playgroud)
如果服务器是PHP但是我使用Asp.NET MVC3并尝试使用默认模型绑定器获取这些值,这将是正常的:
public ActionResult Execute(ICollection<int> pkList)
Run Code Online (Sandbox Code Playgroud)
但是pkList总是为null,似乎默认的模型绑定器不能绑定它.
我该如何正确解决这个问题?
增加 解决方案
我使用Darin Dimitrov的解决方案traditional在jQuery中设置选项:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Run Code Online (Sandbox Code Playgroud)
现在jQuery不再添加[]参数了,它们是这样发送的:
pkList:1
pkList:2
pkList:3
Run Code Online (Sandbox Code Playgroud)
MVC默认模型绑定器正确获取值.
希望这有助于某人.
Dar*_*rov 19
您可以使用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
}
});
Run Code Online (Sandbox Code Playgroud)
该JSON.stringify方法是在现代浏览器中构建的,如果您想支持旧版浏览器,可以将json2.js脚本包含在您的站点中.
要回答你的问题你可以使用set traditional: true选项来指示jQuery回退到传统的参数序列化,因为这在jQuery 1.4中已经改变了,如果你使用的是更高版本,你可以切换回参数序列化的方式:
$.ajax({
url: '@Url.Action("Execute")',
type: 'POST',
data: {
pkList: [1, 2, 3]
},
traditional: true
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16281 次 |
| 最近记录: |