Question

I'm using JQuery's getJSON method to retrieve some data from an MVC controller.

    [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);
    }

The idea, is that I can use this controller method to supply both all contacts, or a given number of contacts if "numberOf" is supplied.

The problem is that "numberOf" in my controller is always null when I send the GET request to "Contacts/GetContacts/5". However, if I send the GET request to "Contacts/GetContacts/?numberOf=5" it works as expected.

If it helps, here's the javascript method:

  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>"
         );
       });
    });
  },
Was it helpful?

Solution

You probably have a routing issue - try applying either of these two fixes:

  1. (Easy but maybe a little ugly)
    Rename the numberOf parameter to id, to enable it to be picked up by the default route.

  2. (A little more work, but your code will look better - at least in this method)
    Add the following route to your route colleciton in global.asax.cs:

    routes.MapRoute(
        "ContactsRoute",
        "Contacts/GetContacts/{numberOf}",
        new { controller = "Contacts", action = "GetContacts", numberOf = null }
    );
    
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top