如何使用 jQuery 将 int 列表发送到 ASP.net MVC 默认模型绑定器
当我像这样用 jQuery 发送 int 列表时:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
然后 jQuery 将转换 pkList 对象并通过邮寄方式发送它,如下所示:
pkList[]:1
pkList[]:2
pkList[]:3
如果服务器是 PHP 但我使用 Asp.NET MVC3 并尝试获取这些值,那就很好了默认模型绑定器:
public ActionResult Execute(ICollection<int> pkList)
但是pkList始终为null,似乎默认模型绑定器无法绑定它。
我该如何正确解决这个问题?
添加 解决方案
我使用了 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 默认模型绑定器正确获取值。
希望这对某人有帮助。
When I send a list of int's with jQuery like this:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
data: {
pkList: [1,2,3]
}
});
Then jQuery will transform the pkList object and send it by post like this:
pkList[]:1
pkList[]:2
pkList[]:3
Which would be fine if the server is PHP but I use Asp.NET MVC3 and try to get these values with the default model binder:
public ActionResult Execute(ICollection<int> pkList)
But pkList is always null, it seems that the default model binder cannot bind it.
How do I solve this correctly?
ADDED SOLUTION
I used the solution from Darin Dimitrov with setting the traditional
option in jQuery:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
Now jQuery doesn't add the []
to the parameters anymore and they are sent like this:
pkList:1
pkList:2
pkList:3
And the MVC default model binder gets the values correctly.
Hope this helps someone.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用 JSON 请求,因为它允许您发送您想要的任何复杂对象:
JSON.stringify
方法是在现代浏览器中内置的,如果您想支持旧版浏览器,您可以包含 json2.js 脚本添加到您的网站。要回答您的问题,您可以使用设置
traditional: true
选项来指示 jQuery 回退到传统参数序列化,因为这在 jQuery 1.4 中已经发生了变化,如果您是使用更高版本,您可以切换回参数序列化的方式:You could use a JSON request as it will allow you to send any complex objects you wish:
The
JSON.stringify
method is built in modern browsers and if you want to support legacy browsers you could include the json2.js script to your site.And to answer your question you could use set the
traditional: true
option to indicate to jQuery to fallback to traditional serialization of parameters since this has changed in jQuery 1.4 and if you are using a later version you have the possibility to switch back to the way parameters are serialized:添加此内容是因为@Darin 错过了控制器操作。
Java脚本代码:
C#代码
Adding this because @Darin miss the controller action.
Java script code:
C# code
Phil Haack 在他的博客上有一篇很棒的文章,应该可以为您指明正确的方向。
模型绑定到列表
Phil Haack has a great article on his blog that should point you in the right direct.
Model Binding To A List