У меня возникла проблема с получением метода контроллера, который возвращает JsonResult для приема параметров, переданных через метод JQuery getJSON.
Код, над которым я работаю, отлично работает, когда второй параметр ("данные") вызова метода getJSON равен нулю. Но когда я пытаюсь передать туда значение, кажется, что метод контроллера даже не вызывается.
В этом примере я просто хочу использовать целое число. Вызов getJSON, который работает нормально, выглядит так:
$.getJSON("/News/ListNewsJson/", null, ListNews_OnReturn);
Метод контроллера такой:
public JsonResult ListNewsJson(int? id)
{
...
return Json(toReturn);
}
Поставив точку останова в методе ListNewsJson, я вижу, что этот метод вызывается, когда параметр данных getJSON имеет значение null, но когда я заменяю его значением, например, 3:
$.getJSON("/News/ListNewsJson/", 3, ListNews_OnReturn);
... метод/точка останова контроллера никогда не срабатывает. Любая идея, что я делаю неправильно?
Я также должен упомянуть, что метод контроллера отлично работает, если я вручную перехожу по адресу через свой браузер ("/News/ListNewsJson/3").
Ответ 1 · рейтинг 3 · tvanfosson
getJSON ожидает набор пар ключ/значение, а не голое значение, поэтому вам нужно будет использовать { id: 3 } для передачи значения идентификатора. К сожалению, это превратится в /News/ListNewsJson/?id=3, что вам не нужно. Я предлагаю просто добавить значение к URL-адресу, чтобы построить его в форме маршрута. Я также предполагаю, что значение на самом деле исходит от переменной, поэтому я записал его в такой форме. Если возможно значение null, вам нужно будет сделать что-то более сложное, чтобы сформулировать URL-адрес, чтобы он имел смысл.
var id = '3';
$.getJSON("/News/ListNewsJson/" + id, ListNews_OnReturn);
Ответ 2 · рейтинг 1 · Thiago Silva
я знаю, что это старый поток, но почему вы не используете помощник MVC Url.Action()? Это позволит убедиться, что ваш маршрут правильный.
$.getJSON('<%=Url.Action("ListNewsJson", "News") %>/' + id, ListNews_OnReturn);
Конечно, если значение id поступает из ViewData, вы можете использовать третий параметр вспомогательного метода Url.Action() для передачи анонимного типа со свойством id, и MVC создаст нужный URL-адрес. В противном случае объедините его в javascript, если значение исходит из функции javascript.
ХТН