当我送INT的列表使用jQuery这样的:如何用jQuery发送INT的列表ASP.net MVC默认模型绑定
$.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始终为空,似乎默认的模型联编程序无法将其绑定。
如何正确解决此问题?
ADDEDSOLUTION
我使用达林季米特洛夫的解决方案与设定的jQuery的traditional
选项:
$.ajax('@Url.Action("Execute")', {
type: 'POST',
traditional: true,
data: {
pkList: [1,2,3]
}
});
现在的jQuery不将[]
添加到参数并且它们是这样发送的:
pkList:1
pkList:2
pkList:3
而MVC默认模型联编程序正确地获取值。
希望这可以帮助别人。
不会默认的模型绑定还可以处理用逗号分隔表单编码数据的列表?就像'data:{pkList:'1,2,3'}'?但除此之外,我使用这种方法来处理我所有的模型序列化,这是JS中更复杂对象的方法。 –
@PaulT。,不,默认的模型联编程序不会接受'data:{pkList:'1,2,3'}'。如果你想处理这样的请求,那么需要自定义模型联编程序,你需要拆分条目然后将每个条目解析回整数。如果目标是将整数数组发送到控制器操作,则不必经历这种痛苦。 –
啊是的,我明白你的意思,只是测试它,它的奇怪,但因为如果你有两个同名的输入,它实际上反序列化到一个列表,只是jQuery的序列化形式发布数据并不处理(即pkList = 1&pkList = 2 works) –