當我送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) –