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」が指定されている場合は特定の数の連絡先を提供できるということです。

問題は、"Contacts/GetContacts/5" に GET 要求を送信すると、コントローラーの "numberOf" が常に null になることです。ただし、「Contacts/GetContacts/?numberOf=5」に GET リクエストを送信すると、期待どおりに動作します。

それが役立つ場合は、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

ルーティングに問題がある可能性があります。次の 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 に答える