2010-05-14 52 views
21

Estoy usando ASP.NET MVC con jQuery. Tengo la siguiente acción MVC que devuelve una página parcial en Success. En Error de aplicación, no estoy seguro de lo que lo envía para manejar correctamente que en el lado del cliente:Cómo devolver un error en un escenario Ajax

public ActionResult LoadFilterSet(int filterSetId) 
{ 
    try 
    { 
     BreadCrumbManager bcManager = this.ResetBreadCrumbManager(this.BreadCrumbManagerID); 
     GeneralHelper.LoadBreadCrumbManager(bcManager, filterSetId); 

     ViewData["BreadCrumbManager"] = bcManager; 
     return View("LoadFilterSet"); 
    } 
    catch (Exception ex) 
    { 
     return Content(""); 
    } 
} 

que sigue es mi jQuery llamada AJAX. Tenga en cuenta que estoy verificando la longitud de los datos para asegurarme de que no haya errores. Por favor sugiérame una mejor manera de hacer esto.

$.ajax({ 
    type: "GET", 
    dataType: "html", 
    async: true, 
    data: ({ filterSetId: selectedId }), 
    url: link, 
    contentType: "text/html; charset=utf-8", 
    success: function(data, textStatus) { 
     if (data.length > 0) { 
      // Clear the local filters first. 
      clearLocalFilters(); 
      $('td.selected-filters table.filters-display').append(data); 
     } 
    } 
}); 

Respuesta

32

me gustaría añadir una función de error en su configuración de la llamada ajax. Deje que el servidor determine el mensaje de error para mostrar y pase el manejador de errores ajax y deje que se muestre.

success: function(data, textStatus) {  
    // Clear the local filters first.  
    clearLocalFilters();  
    $('td.selected-filters table.filters-display').append(data);   
}, 
error: function (data) { 
    alert(data.responseText); // use any display logic here 
} 

En la acción del controlador, si un error se encuentra

Response.StatusCode = (int)HttpStatusCode.BadRequest; 
return Content(errorMessage, MediaTypeNames.Text.Plain); 
+0

desencadenando el error ajax hace el truco. Me gusta esta respuesta – mohang

+0

¿Cuál es el tipo de 'Contenido'? No lo veo en los documentos. todo lo que veo es 'ContentResponse' que no toma un statusCode,' HttpStatusCodeResult' que envuelve el error en una página html y 'System.Web.UI.WebControls.Content' que es completamente diferente – roo2

1

Creo que se puede hacer return Content(false.ToString().ToLower()); si se produce un error, y luego comprobar si los datos no es falsa

if(data != false) 
{ 

    //do stuff 
} 

o

if(!data) 
    alert("Error"); 
else 
{ 
    //do stuff 
} 
+0

Hola Knepe, esto es más o menos lo que estoy haciendo en la función de éxito. Esto permite solo un caso de falla. Si quiero dar una razón adecuada para el fracaso, no podría hacerlo de una manera elegante usando este método. – mohang

Cuestiones relacionadas