我很难将ajax调用中的一些数据绑定到我的MVC控制器方法,并带有以下签名:
public ActionResult AutocompleteHandler([FromUri]Part[] parts, string lastKeyPressed, string term)
public class Part
{
public string hasType { get; set; }
public string hasLabel { get; set; }
public int hasIndex { get; set; }
}
以下ajax调用无法将属性(hasLabel,hasType,hasIndex)绑定到Part
对象。
$("#autocomplete").autocomplete({
source: function( request, response) {
$.ajax({
url: "Controller/AutocompleteHandler",
data: $.param({
parts: [{ hasLabel: "label", hasType: "type", hasIndex: 0 }],
lastKeyPressed : "S",
term : "term"
}),
dataType: "json"
});
},
数组中的项目数正确绑定(因此parts
在此示例中将正确拥有一个项目)但是,尽管我传递了值,但该项目的所有属性都是默认值。
我觉得我之前已经好几次都没有问题,所以我对此感到困惑。
编辑:
请求网址为:
`?parts%5B0%5D%5BhasLabel%5D=label&parts%5B0%5D%5BhasType%5D=type&parts%5B0%5D%5BhasIndex%5D=0&lastKeyPressed=S&term=S`
如果我转到decodeUri()
,请执行以下操作:
`?parts[0][hasLabel]=label&parts[0][hasType]=type&parts[0][hasIndex]=0&lastKeyPressed=S&term=S
更新:
原来答案是这只适用于ApiController
与MVC Web Api而不是普通的MVC。
我将接受在普通MVC中显示相同内容的答案,因为我不想发送一个违反HTTP协议的机构的GET。
答案 0 :(得分:1)
试试这个,
$.ajax({
url: "Controller/AutocompleteHandler",
data: {
parts: [{ hasLabel: "label", hasType: "type"}],
lastKeyPressed : "S",
term : "term"
},
dataType: "json"
});