$ .getJSON отправляет нулевые параметры в контроллер MVC - PullRequest
1 голос
/ 11 октября 2009

Я использую метод 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".

Проблема в том, что «numberOf» в моем контроллере всегда равно нулю, когда я отправляю GET-запрос в «Contacts / GetContacts / 5». Однако, если я отправляю запрос GET в «Контакты / 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 Ответ

2 голосов
/ 11 октября 2009

Возможно, у вас проблема с маршрутизацией - попробуйте применить одно из следующих исправлений:

  1. (Легко, но, возможно, немного некрасиво)
    Переименуйте параметр numberOf в id, чтобы включить его по маршруту по умолчанию.

  2. (немного больше работы, но ваш код будет выглядеть лучше - по крайней мере, в этом методе)
    Добавьте следующий маршрут в коллекцию маршрутов в global.asax.cs:

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