使用FromUri作为多个Action方法参数之一

时间:2013-07-09 07:36:07

标签: jquery asp.net-mvc-4

我很难将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。

1 个答案:

答案 0 :(得分:1)

试试这个,

$.ajax({ 
         url: "Controller/AutocompleteHandler", 
         data: {
                     parts: [{ hasLabel: "label", hasType: "type"}],
                     lastKeyPressed : "S",                     
                     term : "term"                             
                },
                    dataType: "json"
});