Ajax.BeginForm OnFailure вызывается с помощью Response, а не AjaxContext - PullRequest
4 голосов
/ 17 сентября 2011

При написании форм ввода данных Ajax в моем приложении ASP.NET MVC3 у меня есть стандартный обработчик ошибок Ajax, который выглядит следующим образом:

function handleAjaxError(ajaxContext) {
     var response = ajaxContext.get_response();
     var statusCode = response.get_statusCode();
     alert("Request failed, status code " + statusCode);
}

Теперь я обнаружил, что параметр отправлен на handleAjaxErrorэто не контекст Ajax, а по какой-то причине сам объект Response.

Возможно, это известное изменение поведения в MVC3?Вот настройка формы, если это уместно:

@using (Ajax.BeginForm("Create", "Attendance", null, new AjaxOptions
     {   OnFailure = "handleAjaxError",
         OnSuccess = "alert('success')" },  
new  { id = "frmCreateException" }))
{
    @Html.EditorFor(m => Model)
}

Действие контроллера возвращает PartialViewResult.На данный момент исключение HTTP составляет 500, потому что я еще не создал представление.

Спасибо!

1 Ответ

11 голосов
/ 17 сентября 2011

Это известное изменение поведения в MVC3, может быть?

Да, ASP.NET MVC 3 использует ненавязчивый jQuery для AJAX, в отличие от предыдущей версии, которая использовала Microsoft*.js. Таким образом, первый аргумент, передаваемый в обработчик ошибок, является объектом jqXHR.

И чтобы получить текст ответа и код состояния:

alert(ajaxContext.status);
alert(ajaxContext.responseText);
...