当我使用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,并尝试使用默认模型绑定器获取这些值:
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默认的模型绑定器可以正确获取这些值。
希望能对某些人有所帮助。
data: { pkList: '1,2,3' }
吗?但对于所有模型序列化,我都使用这种方法,对于 JS 中更复杂的对象来说是最好的选择。 - Paul Tyngdata: { pkList: '1,2,3' }
。如果您想處理這樣的請求,則需要使用自定義模型繫結器,在其中需要拆分條目,然後將每個條目解析回整數。如果目標是將整數數組發送到控制器操作,則無需經歷此痛苦。 - Darin Dimitrov