【问题标题】:$.getJSON Sends Null Parameters to MVC Controller$.getJSON 向 MVC 控制器发送空参数
【发布时间】:2010-12-05 19:04:09
【问题描述】:

我正在使用 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>"
         );
       });
    });
  },

【问题讨论】:

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


    【解决方案1】:

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

    1. (简单但可能有点丑)
      numberOf参数重命名为id,使其能够被默认路由拾取。

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

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

    【讨论】:

    • 不要认为这是正确的。如果 numberOf 为 10,则路径将为:“/Contact/GetContact/10”...在这种方法下,没有对 numberOf 或 id 的引用。将 {numberOf} 添加到路由表不会做任何事情。如果我错了,请纠正我。
    • 如果传递查询字符串确实有效,那么肯定看起来像一个路由问题。
    • 我先采取了第一种方法,因为我已经定义了路线。您的第一个建议有效,因此您认为这是一个路由问题是正确的。根本原因是我将我的路由定义在默认路由之下,而不是在它之上。所以请求被路由到默认路由,控制器无法映射到参数,因为它期待的是“Id”而不是“numberOf”。谢谢托马斯!
    • aikr437:将numberOf 添加到路由表的原因是名称必须与操作方法中的参数名称相对应。 Kappers:您可能想查看 Phil Haack 的路由调试器 - 它可以非常有用地确定哪个路由实际处理请求,以及哪些其他路由也匹配但被拦截。有关详细信息,请参阅此博客文章:haacked.com/archive/2008/03/13/url-routing-debugger.aspx
    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 2015-11-21
    • 2010-11-27
    • 2017-10-31
    • 1970-01-01
    • 2011-07-03
    • 2020-04-17
    • 2012-07-16
    相关资源
    最近更新 更多