Я использую метод 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>"
);
});
});
},
Не думайте, что это правильно. Если numberOf равно 10, путь будет следующим: «/Contact/GetContact/10"... нет ссылки на numberOf или id, учитывая этот подход. Добавление {numberOf} в таблицу маршрутов не сделает ничего. Пожалуйста, поправьте меня, если я ошибаюсь. – Amir
определенно выглядит как проблема маршрутизации, если передача строки запроса действительно работает. – scottm
Сначала я сделал первый подход, потому что я уже определил маршрут. Ваше первое предложение сработало, поэтому вы правы, что это проблема маршрутизации. Основная причина заключалась в том, что я определил свой маршрут ниже маршрута по умолчанию, а не выше его. Таким образом, запрос перенаправлялся на маршрут по умолчанию, и контроллер не мог сопоставить параметр, потому что ожидал «Id», а не «numberOf». Спасибо Томас! – Kappers