#asp.net-mvc-3 #jquery
#asp.net-mvc-3 #jquery
Вопрос:
У меня возникла проблема с использованием AJAX в MVC3. Проблема в том, что при отладке проекта я вижу, что контроллер получает переданные соответствующие значения, я вижу, что запрос генерируется правильно и возвращает тот же результат, который я получаю при тестировании его в LINQPad. Когда запрос возвращает пустой результирующий набор, я не получаю никаких ошибок. Однако, когда в результирующем наборе есть данные, я получаю «Внутреннюю ошибку сервера». Похоже, что проблема заключается в передаче результата JSON из контроллера в представление.
У меня есть приведенный ниже код.
Код контроллера
[HttpPost]
public ActionResult Load(int value1, int value2, int value3)
{
var db = new MyDataContext();
List<Foo> items = new List<Foo>();
items = db.Foos.Where(f => f.v1 == value1 amp;amp; f.v2 == value2 amp;amp; f.v3 == value3).Take(50).ToList();
var results = Json(items, JsonRequestBehavior.AllowGet);
return results;
}
Код jQuery / Javascript
function Load() {
var v1 = 3;
var v2 = 2;
var v3 = 1;
$.ajax({
type: 'POST',
dataType: 'json',
url: '/FooBar/Load',
data: { value1: v1, value2: v2, value3: v3 },
error: function (xhr, status, error) {
alert('Error loading: "' error '"');
},
success: function (jsonresults) {
}
});
}
Если бы кто-нибудь мог взглянуть еще раз, я был бы очень признателен.
Комментарии:
1. вам не нужно делать
JsonRequestBehavior.AllowGet
, когда вы выполняетеPOST
Ответ №1:
Попробуйте изменить свой метод action, чтобы возвращать JsonResult вместо ActionResult. Это единственное, что я вижу, что вы делаете неправильно, поскольку я делаю практически то же самое, и это работает так, как задумано, но мой метод контроллера возвращает JsonResult.
Кроме того, проверьте эту ссылку, поскольку она может быть полезной, а может и не быть. Это спасло мою задницу пару дней назад:
Комментарии:
1. Это был лучший ответ, поскольку он решил другую проблему после того, как я исправил ту, которую я опубликовал здесь. Фактическая проблема заключалась в том, что у JSON были проблемы с сериализацией набора данных, который я передавал обратно. Спасибо @James и спасибо Fiddler.
Ответ №2:
попробуйте вместо этого вернуть jsonresult http://msdn.microsoft.com/en-us/library/system.web.mvc.jsonresult.aspx
Ответ №3:
я думаю, это должно сработать
[HttpPost]
public ActionResult Load(int value1, int value2, int value3)
{
var db = new MyDataContext();
List<Foo> items = new List<Foo>();
items = db.Foos.Where(f => f.v1 == value1 amp;amp; f.v2 == value2 amp;amp; f.v3 == value3).Take(50).ToList();
return Json(items);
}