当我发送一个int的列表与jQuery像这样:
$.ajax('@Url.Action("Execute")',{ type: 'POST',data: { pkList: [1,2,3] } });
那么jQuery将转换pkList对象并通过post这样发送:
pkList[]:1 pkList[]:2 pkList[]:3
如果服务器是PHP但是我使用Asp.NET MVC3并尝试使用默认模型绑定器来获取这些值,那将是很好的:
public ActionResult Execute(ICollection<int> pkList)
但是pkList总是为空,似乎默认的模型binder不能绑定它.
如何正确解决?
添加解决方案
我使用Darin Dimitrov的解决方案,在jQuery中设置了传统的选项:
$.ajax('@Url.Action("Execute")',traditional: true,3] } });
现在jQuery没有添加[]到参数,它们是这样发送的:
pkList:1 pkList:2 pkList:3
并且MVC默认模型绑定器正确地获取值.
希望这有助于某人.
解决方法
您可以使用JSON请求,因为它将允许您发送任何您想要的复杂对象:
$.ajax({ url: '@Url.Action("Execute")',type: 'POST',contentType: 'application/json; charset=utf-8',data: JSON.stringify({ pkList: [1,3] }),// you could throw any javascript object you like here success: function(result) { // process the results } });
JSON.stringify方法内置于现代浏览器中,如果要支持旧版浏览器,则可以将json2.js脚本包含在您的站点中.
为了回答您的问题,您可以使用传统的:true选项来指示jQuery从传统的参数序列化到后退,因为在jQuery 1.4中已经发生变化,如果您使用的是更高版本,则可以将其重新切换回参数序列化:
$.ajax({ url: '@Url.Action("Execute")',3] },traditional: true });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。