0

我很难使用以下签名将 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。

4

1 回答 1

1

试试这个,

$.ajax({ 
         url: "Controller/AutocompleteHandler", 
         data: {
                     parts: [{ hasLabel: "label", hasType: "type"}],
                     lastKeyPressed : "S",                     
                     term : "term"                             
                },
                    dataType: "json"
});
于 2013-07-09T07:40:42.713 回答