#javascript #asp.net #json #jquery
#javascript #asp.net #json #jquery
Вопрос:
в моем 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
Комментарии:
1. вам не хватает одной кавычки для закрытия
/Controller/Method
2. @kjy112 Это, очевидно, не фактический код, поэтому я думаю, что это просто опечатка.
3. возможно, @lonesomeday… возможно!
Ответ №1:
Я не совсем уверен в том, как 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 отправит серверу пустую строку в качестве строки запроса, поэтому ваш сервер не получит информацию.
Комментарии:
1. и в зависимости от того, как настроены ваши маршруты, вы также можете попробовать $.get(‘/Controller/Method/’ tourID, null, функция (данные) {}
2. @Todd действительно. Проблема в том, что на данный момент вообще не отправляются данные…
3. 1 За подсказку с {id: tourID}. Это решило проблему с вызовом действия контроллера, содержащего параметр «id»
Ответ №2:
Если JavaScript выполняется без ошибок, то сообщение фактически отправляется на ваш сервер и фактически получает ответ. Однако, если ваши параметры не совпадают с сигнатурой действия контроллеров или есть какая-то другая проблема, вы получите ответ от сервера с сообщением об ошибке. Скорее всего, это содержимое в формате HTML, предоставляющее вам информацию о сбое.
Возможно, вы не достигли точки останова из-за ошибки, возникшей перед вызовом действия. Проверьте детали ответа, который вы на самом деле получаете.
Ответ №3:
Я использовал плагин Firebug, чтобы найти проблему. Список, который я пытался вернуть в методе контроллера, не удалось сериализовать из-за циклических зависимостей. Я решил это, добавив атрибут [ScriptIgnore] в навигационные свойства соответствующего класса сущностей.