Как инициировать обратный вызов «error» в вызове jQuery AJAX с использованием ASP.NET MVC? - PullRequest
31 голосов
/ 02 января 2009

Это связано с моим вопросом на , как обрабатывать ошибки от вызовов jQuery AJAX . В нескольких ответах предлагалось использовать обратный вызов «error» для отображения любых ошибок из вызова JQuery AJAX. Мне было интересно, как это сделать с помощью ASP.NET MVC. Есть ли способ для моего действия контроллера вернуть ошибку, которая была бы доступна из обратного вызова "error"? Код на стороне клиента будет выглядеть примерно так:

$.ajax({
   type: "POST",
   url: "MyUrl",
   data: "val1=test",
   success: function(result){
        // Do stuff
   },
   error: function(request,status,errorThrown) {

   }
 });

Ответы [ 6 ]

21 голосов
/ 02 января 2009

ПРИМЕЧАНИЕ: Эй, это было опубликовано до того, как ASP.Net MVC даже достиг 1.0, и с тех пор я даже не смотрел на платформу. Вы, вероятно, должны прекратить голосование против этого.


Сделайте что-то вроде этого:

Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Error message here");

Код состояния должен меняться в зависимости от характера ошибки; как правило, 4xx для пользовательских проблем и 5xx для проблем на стороне сервера.

8 голосов
/ 02 января 2009

Если вы используете

[HandleError]

, а затем HttpException будет пойман и перенаправлен на вашу пользовательскую страницу ошибки.

Другой вариант - использовать

Response.StatusCode = 500;
Response.Write("Error Message");
Response.End();

Возможно, есть более удобный способ написать это, но я еще не наткнулся на него.

7 голосов
/ 29 сентября 2010

Если вы используете MVC 3, вы можете вернуть ActionResult в вашем контроллере, который имеет код состояния HTTP и сообщение о состоянии вместе:

return new HttpStatusCodeResult(500, "Error message");

Тогда в вашем сообщении об ошибке:

error: function (request, textStatus, errorThrown) {
    alert(request.statusText);
}
1 голос
/ 29 ноября 2012

отправляю вам предложение; работает с контролируемыми и неконтролируемыми исключениями.

  public class CodeExceptionToHttpFilter : FilterAttribute, IExceptionFilter
{
    public CodeExceptionToHttpFilter()
    {
      Order = 2;
    }
    public void OnException(ExceptionContext filterContext)
    {
      var codeException = filterContext.Exception as CodeException;
      var response = filterContext.RequestContext.HttpContext.Response;
  response.StatusCode = (codeException == null)? 550: 551;
      response.ContentType = MediaTypeNames.Text.Plain;
      response.Charset = "utf-8";
      response.Write(filter.Exception.Message);
      filterContext.ExceptionHandled = true;
      response.TrySkipIisCustomErrors = true;
   }

}

Больше информации в моем блоге. http://rodrigopb.wordpress.com/2012/11/28/gestion-de-errores-en-peticiones-ajax-a-mvc/

1 голос
/ 02 января 2009

Согласно этой странице вам просто нужно применить заголовок HTTP/1.0 500 Internal Server Error на странице ASP.net. Запрос $.ajax перехватит эту ошибку и выполнит функцию обратного вызова error. =]

1 голос
/ 02 января 2009

Я думаю, что событие вызывается для любого ответа с кодом ответа, отличным от 200. Хотя я не могу найти доказательства этого в документации.

Для этого из кода (работает в Webforms):

throw new HttpException(500, "Error message");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...