$ .getJSON将空参数发送到MVC控制器

时间:2009-10-11 17:46:50

标签: c# jquery asp.net-mvc json http-get

我正在使用JQuery的getJSON方法从MVC控制器中检索一些数据。

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult GetContacts(int? numberOf)
    {
        List<Contact> contacts =
            (numberOf != null && numberOf > 0) ?
                _provider.GetContacts(Convert.ToInt32(numberOf)):
                _provider.GetContacts();

        return Json(contacts);
    }

我的想法是,如果提供“numberOf”,我可以使用此控制器方法提供所有联系人或给定数量的联系人。

问题是当我将GET请求发送到“Contacts / GetContacts / 5”时,我的控制器中的“numberOf”始终为null。但是,如果我将GET请求发送到“Contacts / GetContacts /?numberOf = 5”,它将按预期工作。

如果有帮助,这是javascript方法:

  getContacts: function(numberOf){
    var path = "/Contact/GetContacts/";
        path = (numberOf<=0) ? path : "/Contact/GetContacts/" + numberOf; 

    $.getJSON(path, null,
      function(json){
       $.each(json, function(){       
         $('tbody','#contacts').append(
             "<tr id=\"contact-"+ this.Id +"\">"
            +  "<td>"+ this.Id +"</td>"
            +  "<td>"+ this.FirstName +"</td>"
            +  "<td>"+ this.LastName +"</td>"
            + "</tr>"
         );
       });
    });
  },

1 个答案:

答案 0 :(得分:2)

您可能遇到路由问题 - 请尝试应用以下两种方法之一:

  1. (容易但可能有点难看)
    numberOf参数重命名为id,以使其能够被默认路由选中。

  2. (多一点工作,但你的代码看起来会更好 - 至少在这种方法中)
    将以下路由添加到global.asax.cs中的路由集合中:

    routes.MapRoute(
        "ContactsRoute",
        "Contacts/GetContacts/{numberOf}",
        new { controller = "Contacts", action = "GetContacts", numberOf = null }
    );