2009-10-11 5 views
1

Я использую метод getJSON JQuery для извлечения некоторых данных из контроллера 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» в моем контроллере всегда имеет значение null, когда я отправляю запрос GET на «Контакты/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>" 
     ); 
     }); 
    }); 
    }, 

ответ

2

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

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

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

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

Не думайте, что это правильно. Если numberOf равно 10, путь будет следующим: «/Contact/GetContact/10"... нет ссылки на numberOf или id, учитывая этот подход. Добавление {numberOf} в таблицу маршрутов не сделает ничего. Пожалуйста, поправьте меня, если я ошибаюсь. – Amir

+0

определенно выглядит как проблема маршрутизации, если передача строки запроса действительно работает. – scottm

+0

Сначала я сделал первый подход, потому что я уже определил маршрут. Ваше первое предложение сработало, поэтому вы правы, что это проблема маршрутизации. Основная причина заключалась в том, что я определил свой маршрут ниже маршрута по умолчанию, а не выше его. Таким образом, запрос перенаправлялся на маршрут по умолчанию, и контроллер не мог сопоставить параметр, потому что ожидал «Id», а не «numberOf». Спасибо Томас! – Kappers

 Смежные вопросы

  • Нет связанных вопросов^_^