Как вернуть ошибку из действия ASP.NET MVC - PullRequest
16 голосов
/ 04 марта 2010

Я использую ASP.NET MVC для разработки веб-сайта.Я использую JQuery для функциональности AJAX.В методах действия я хочу вернуть некоторую ошибку, чтобы указать, что ввод неправильный или что действие не может быть выполнено.В таких случаях ошибок я ожидаю вызова обработчика ошибок jquery ajax и могу предпринять соответствующие действия.Я не нашел способ, как это сделать.Ниже описан мой метод действия.

В случаях ошибки, что я должен отправлять из действия, чтобы запустить обработчик ошибок jquery?

Ответы [ 3 ]

23 голосов
/ 04 марта 2010

Ваш обработчик ошибок ajax будет вызываться, когда действие не возвращает ожидаемый код состояния. Например, он сработает, если действие не было найдено, или если вы сгенерируете исключение, которое не обрабатываете. В вашем случае он будет вызван, если вы не уловите ошибку в своем действии (так как действие вернет код состояния 500).

Я бы, однако, не сделал этого таким образом, поскольку это, вероятно, ожидаемая ошибка. Я бы предпочел вернуть json как в случае успеха, так и в случае ошибки. Затем вы можете указать, если это успешный звонок или нет. Примерно так:

public ActionResult AddToFavourites(int entityId, string entityType)
{

    if (!Request.IsAjaxRequest())
        throw new InvalidOperationException("This action can be called only in async style.");

    try
    {
        RBParams.EntityType typeOfFavourite = (RBParams.EntityType)Enum.Parse(typeof(RBParams.EntityType), entityType);
        string status = "";

        if (typeOfFavourite == RBParams.EntityType.BusinessEntity)
        {
            status = MarkFavouriteEntity(entityId);
        }
        else if (typeOfFavourite == RBParams.EntityType.Review)
        {
            status = MarkFavouriteReview(entityId);
        }
        else
        {
            throw new InvalidOperationException("The type of the entity is not proper");
        }

        return Json(new { Success = true, Status = status });

    }
    catch (Exception ex)
    {

        return Json(new { Success = false, Message = ex.Message });
    }
}

Затем вы обрабатываете его так же, как успешный вызов. Вы просто проверяете свойство Success вашего ответа json. Затем вы обрабатываете непредвиденные ошибки в обратном вызове.

11 голосов
/ 20 августа 2014

Ответ Маттиаса Якобссона верен. Но я думаю, что лучший способ вернуть ошибку в jQuery - создать JSON и отправить его со статусом 500. Однако когда я сделал это и попытался развернуть свой веб-сайт MVC с помощью IIS 7, я понял, что он возвращает мне пользовательский страница вместо сообщения.

Код был ...

catch (Exception ex)
{
    Response.StatusCode = 500;
    return Json(new { error = ex.Message });
}

Но потом я увидел эту ветку , которая привела меня на этот веб-сайт (от Рика Строла).

В целом, я понял, что вы должны сказать IIS, чтобы не вставлять пользовательскую страницу ошибки, поэтому вам нужен этот флаг (в global.asax или в catch):

Response.TrySkipIisCustomErrors = true;

Итак, в jQuery код остается прежним:

$.ajax({...})
.done(function (result) {...})
.fail(function (e) { 
   console.log(e.responseJSON.error);
});
0 голосов
/ 04 марта 2010

вы должны настроить jquery для обработки ошибки:

$.ajaxSetup({
    error: function(xhr) {
        alert(xhr.statusText);
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...