¿Cómo manejo las excepciones lanzadas en un controlador cuando jquery ajax llama a una acción?
Por ejemplo, me gustaría un código javascript global que se ejecute en cualquier tipo de excepción del servidor durante una llamada ajax que muestre el mensaje de excepción si está en modo de depuración o simplemente un mensaje de error normal.
En el lado del cliente, llamaré a una función en el error de ajax.
En el lado del servidor, ¿necesito escribir un filtro de acción personalizado?
asp.net-mvc
jquery
asp.net-mvc-3
Shawn Mclean
fuente
fuente
Respuestas:
Si el servidor envía algún código de estado diferente a 200, se ejecuta la devolución de llamada de error:
y para registrar un controlador de errores global, puede usar el
$.ajaxSetup()
método:Otra forma es usar JSON. Entonces, podría escribir un filtro de acción personalizado en el servidor que detecta la excepción y la transforma en una respuesta JSON:
y luego decora la acción de tu controlador con este atributo:
y finalmente invocarlo:
fuente
error
se ejecutará la devolución de llamada.Después de buscar en Google, escribo un manejo de excepción simple basado en el filtro de acción MVC:
y escribe en global.ascx:
y luego escriba este script en el diseño o la página maestra:
Finalmente, debe activar el error personalizado. y luego disfrútalo :)
fuente
Desafortunadamente, ninguna de las respuestas es buena para mí. Sorprendentemente, la solución es mucho más sencilla. Regreso del controlador:
Y manejarlo como un error HTTP estándar en el cliente como desee.
fuente
int
. Además, cuando hago esto, el resultado se pasa alajax
success
controlador y no alerror
controlador. ¿Es este el comportamiento esperado?Hice una solución rápida porque tenía poco tiempo y funcionó bien. Aunque creo que la mejor opción es usar un filtro de excepción, tal vez mi solución pueda ayudar en el caso de que se necesite una solución simple.
Hice lo siguiente. En el método del controlador, devolví un JsonResult con una propiedad "Success" dentro de los datos:
Más adelante, en la llamada ajax, solo pedí esta propiedad para saber si tenía una excepción:
Espero que esto ayude. Código feliz! :PAGS
fuente
De acuerdo con la respuesta de aleho, aquí hay un ejemplo completo. Funciona de maravilla y es super simple.
Código del controlador
Código Javascript en la vista
¡Espero que esto ayude a alguien más!
fuente
Para manejar errores de llamadas ajax en el lado del cliente, asigna una función a la
error
opción de la llamada ajax.Para establecer un valor predeterminado a nivel mundial, puede utilizar la función que se describe aquí: http://api.jquery.com/jQuery.ajaxSetup .
fuente