Результат ASP.Net MVC Json: параметры, переданные в метод контроллера, вызывают проблему

У меня возникла проблема с получением метода контроллера, который возвращает 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").


person Moskie    schedule 18.03.2009    source источник


Ответы (2)


getJSON ожидает набор пар ключ/значение, а не голое значение, поэтому вам нужно будет использовать { id: 3 } для передачи значения идентификатора. К сожалению, это превратится в /News/ListNewsJson/?id=3, что вам не нужно. Я предлагаю просто добавить значение к URL-адресу, чтобы построить его в форме маршрута. Я также предполагаю, что значение на самом деле исходит от переменной, поэтому я записал его в такой форме. Если возможно значение null, вам нужно будет сделать что-то более сложное, чтобы сформулировать URL-адрес, чтобы он имел смысл.

var id = '3';
$.getJSON(”/News/ListNewsJson/” + id, ListNews_OnReturn);
person tvanfosson    schedule 18.03.2009

я знаю, что это старый поток, но почему вы не используете помощник MVC Url.Action()? Это позволит убедиться, что ваш маршрут правильный.

$.getJSON('<%=Url.Action("ListNewsJson", "News") %>/' + id, ListNews_OnReturn);

Конечно, если значение id поступает из ViewData, вы можете использовать третий параметр вспомогательного метода Url.Action() для передачи анонимного типа со свойством id, и MVC создаст нужный URL-адрес. В противном случае объедините его в javascript, если значение исходит из функции javascript.

ХТН

person Thiago Silva    schedule 22.03.2010