1

我正在使用 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”始终为空。但是,如果我将 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>"
         );
       });
    });
  },
4

1 回答 1

2

您可能遇到路由问题 - 尝试应用以下两个修复程序之一:

  1. (简单但可能有点难看)将参数
    重命名为,以使其能够被默认路由拾取。numberOfid

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

    routes.MapRoute(
        "ContactsRoute",
        "Contacts/GetContacts/{numberOf}",
        new { controller = "Contacts", action = "GetContacts", numberOf = null }
    );
    
于 2009-10-11T17:56:46.247 回答