Получить JSON не удается с помощью jQuery 1.5.1 и ASP.NET MVC V3 - PullRequest
1 голос
/ 20 мая 2011

в моем javascript я пытаюсь вызвать метод контроллера платформы ASP.NET MVC V3, на самом деле я попробовал оба эти решения:

$.get('/Controller/Method', tourID, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");


$.getJSON('/Controller/Method', null, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}); 

Мой метод контроллера выглядит следующим образом:

public JsonResult GetList(int id)
{
    Object obj = repository.GetObject(id);
    // obj.Stuff is an EntityCollection
    return Json(obj.Stuff, JsonRequestBehavior.AllowGet);
}

Моя проблема в том, что функция контроллера не будет вызываться (у меня здесь установлена ​​точка останова).Хорошо, если я удалю параметр "id", его можно будет вызвать, но раздел "$ .each ..." не будет выполнен.Как я могу отладить взаимодействие между javascript и ASP.NET, что здесь не так?

Заранее спасибо и с наилучшими пожеланиями,

Artjom

Ответы [ 3 ]

1 голос
/ 20 мая 2011

Я не совсем уверен, как ASP.NET MVC получает параметры, но вы не можете просто передать число в качестве аргумента data в $.get. Вам необходимо предоставить key=value пары, которые затем интерпретируются серверным кодом и передаются методу контроллера.

Вероятно, это будет выглядеть примерно так:

$.get('/Controller/Method', {id: tourID}, function (data) {
    $.each(data, function (index, listelement) {
     ...do something with listelement
    });
}, "json");

jQuery возьмет {id: tourID} и преобразует его в пары ключ-значение (здесь это будет что-то вроде id=5 и добавит это к URL-адресу в виде строки запроса.

Если вы просто передадите число, jQuery отправит серверу пустую строку в качестве строки запроса, поэтому ваш сервер не получит информацию.

0 голосов
/ 22 мая 2011

Я использовал плагин Firebug, чтобы найти проблему.Список, который я пытался вернуть в методе контроллера, не мог быть сериализован из-за циклических зависимостей.Я решил эту проблему, добавив атрибут [ScriptIgnore] к свойствам навигации соответствующего класса сущности.

0 голосов
/ 20 мая 2011

Если JavaScript выполняется без ошибок, то сообщение фактически отправляется на ваш сервер и фактически получает ответ.Однако, если ваши параметры не совпадают с сигнатурой действия контроллеров, или есть какая-то другая проблема, вы получите ответ от сервера с сообщением об ошибке.Скорее всего, это контент в формате HTML, дающий вам информацию об ошибке.

Возможно, вы не достигли точки останова из-за ошибки, возникшей до вызова действия.Проверьте детали ответа, который вы фактически получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...