2011-03-21 23 views
6

Tengo un formulario creado utilizando código de acción Ajax.BeginForm()Como llegar statusDescription de HttpStatusCodeResult por JavaScript

<% using (Ajax.BeginForm("UpdateCompanyShop", "CompanyShop", FormMethod.Post, 
    new AjaxOptions { OnSuccess = "updateList", OnFailure = "onError", 
    UpdateTargetId="slist", LoadingElementId = "loading" })) 

controlador es como abajo:

if(string.IsNullOrEmpty(company.Address)) 
    return new HttpStatusCodeResult(418, "Please fill in address"); 
else if (company.DistrictID < 0) 
    return new HttpStatusCodeResult(418, "Please select district"); 
else 
    return new HttpStatusCodeResult(418, "Error saving data"); 

Solía ​​onFailure = "onError" en AjaxOptions y yo tener mi script del lado del cliente como este

function onError(response, status, error) { 
    var statusDescription = ***something***; 
    alert(statusDescription); 
} 

Yo uso depurador en el Jav ascript pero no puede encontrar el (el segundo parámetro en HttpStatusCodeResult) StatusDescription

alguna idea de cómo puedo conseguir descripción del estado? O no debería usar HttpStatusCodeResult en absoluto? ¿Cuál es la forma correcta de devolver el error (aparte de la validación) en el envío de AJAX?

Respuesta

5

Uso response.statusText:

function onError(response, status, error) { 
    alert("Oops! " + response.statusText); 
} 

me ha escrito una entrada que proporciona algo más de detalle y un par de ejemplos: Dealing with javascript or JSON results after an AJAX call with Ajax.ActionLink, unobtrusive AJAX and MVC 3

+2

Sergi, yo uso depurador para comprobar que hay 4 propiedades. En mi caso, tienen los valores readyState = 4, responseText = "", status = 418 y statusText = "error", ninguno de ellos igual a la cadena de descripción del estado. – newcoder

+0

@newcoder - Creo que es porque no estás utilizando javascript discreto en tu aplicación MVC; Tomemos una tercera publicación: [Ajax discreto en ASP.NET MVC 3] (http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html) –

+0

@Sergi Papaseit, puedo ver que tener javascript discreto habilitado como se menciona en su artículo. También veo que la etiqueta del formulario está usando data-ajax. Lo único especial es que la forma ajax está dentro de una vista parcial que se carga dinámicamente por un actionlink. Pero todo funciona bien, excepto después de que se devuelve HttpStatusCodeResult. – newcoder

1

que tienen el mismo problema. Creo que el statusDescription debe ser response.responseText en el controlador JavaScript OnFailure. Cuando hace lo siguiente a la responseText no está vacío, pero no es una solución muy agradable IMO:

Response.StatusCode = 400; 
return Json("error message here", JsonRequestBehavior.AllowGet); 
Cuestiones relacionadas