Ajax Request возвращает HTTP-ошибку 500, используя MVC и $.ajax-вызов с POST?

Я видел несколько потоков об этом, и я пробовал все ответы (ASP.NET MVC JsonResult возвращает 500)

Мой запрос ajax повторно включает 500 внутренних ошибок. Если я отлаживаю, я даже не дойду до своего действия.

Вот мой вызов ajax:

$.ajax({
                    url: '@Url.Action("UpdateSortOrder", "FormItems")',
                    data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId },
                    type: 'POST',
                    success: function (data) {
                        console.log(data);
                    },
                    error: function (xhr, status, exception) {
                        console.log("Error: " + exception + ", Status: " + status);
                    }
                });

И мое действие:

[HttpPost]
    public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId)
    {
        FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId);

        return Json(updatedItem, JsonRequestBehavior.DenyGet);
    }

Используя хром-консоль, это ответные заголовки ответа:

HTTP/1.1 500 Внутренняя ошибка сервера Cache-Control: private Content-Type: text/html; charset = utf-8 Сервер: Microsoft-IIS/7.5 X-AspNetMvc-версия: 3.0 X-AspNet-версия: 4.0.30319 X-Powered-By: ASP.NET Дата: Вт, 18 дек 2012 21:53:41 GMT Контент-длина: 17041

В журналах сервера нет кодов подстановки. Любая идея, что я делаю неправильно здесь? Я предпочитаю использовать POST вместо GET.

Данные формы отображаются как:

itemToUpdateId: 18ac5399-342e-4a39-9da1-3281a89501df

newParentItemId: нулевой

newPreviousItemId: нулевой

Что правильно.

Я попытался настроить contentType на application/json и традиционный = true, как в этом вопросе: Отправка сообщения ajax в mvc с помощью "application/json; charset = utf-8" возвращает ошибку 500 с сервера веб-разработчиков

Такая же ошибка.

Ответ 1

Ну, я смог выяснить, в чем проблема, не было ничего плохого в синтаксисе AJAX или даже в действии. Просто мой возвращенный объект содержал круглую ссылку. Я смог увидеть фактическую ошибку в консоли Chrome, нажав на запрос POST на вкладке "Сеть", а затем просмотрев вкладку предварительного просмотра. Это отобразило фактическое сообщение об ошибке.

Ответ 2

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

Ответ 3

Старый пост, альтернативный ответ... На всякий случай кто-то здесь.

Моя проблема была вызвана тем фактом, что действие моего контроллера, которое я вызывал, возвратило результат действия Partial View, а файл ParticView .cshtml не был опубликован на сервере (не был включен в проект Visual Studio при публикации).

Ответ 4

если вам не нужен updateItem в успехе, тогда не возвращайте его, просто верните простую переменную