Como faço para lidar com exceções lançadas em um controlador quando jquery ajax chama uma ação?
Por exemplo, eu gostaria de um código javascript global que seja executado em qualquer tipo de exceção de servidor durante uma chamada ajax que exibe a mensagem de exceção se estiver no modo de depuração ou apenas uma mensagem de erro normal.
No lado do cliente, chamarei uma função no erro de ajax.
No lado do servidor, preciso escrever um filtro de ação personalizado?
asp.net-mvc
jquery
asp.net-mvc-3
Shawn Mclean
fonte
fonte
Respostas:
Se o servidor enviar algum código de status diferente de 200, o retorno de chamada de erro será executado:
e para registrar um manipulador de erros global, você pode usar o
$.ajaxSetup()
método:Outra maneira é usar JSON. Portanto, você pode escrever um filtro de ação personalizado no servidor que captura a exceção e a transforma em resposta JSON:
e, em seguida, decore sua ação de controlador com este atributo:
e finalmente invoque-o:
fonte
error
retorno de chamada será executado.Depois de pesquisar no Google, escrevo um tratamento de exceção simples com base no filtro de ação MVC:
e escreva em global.ascx:
e, em seguida, escreva este script no layout ou página mestra:
Finalmente, você deve ativar o erro personalizado. e depois divirta-se :)
fonte
Infelizmente, nenhuma das respostas é boa para mim. Surpreendentemente, a solução é muito mais simples. Retorno do controlador:
E trate-o como erro HTTP padrão no cliente, conforme desejar.
fonte
int
. Além disso, quando faço isso, o resultado é passado para oajax
success
manipulador, não para oerror
manipulador. Este é o comportamento esperado?Fiz uma solução rápida porque estava com pouco tempo e funcionou bem. Embora eu ache que a melhor opção é usar um Filtro de Exceção, talvez minha solução possa ajudar no caso de uma solução simples ser necessária.
Eu fiz o seguinte. No método do controlador, retornei um JsonResult com uma propriedade "Success" dentro dos Dados:
Mais tarde, na chamada de ajax, pedi apenas esta propriedade para saber se havia uma exceção:
Espero que isto ajude. Código feliz! : P
fonte
De acordo com a resposta de aleho, aqui está um exemplo completo. Funciona muito bem e é super simples.
Código do controlador
Código Javascript na visualização
Espero que isso ajude mais alguém!
fonte
Para lidar com erros de chamadas ajax no lado do cliente, você atribui uma função à
error
opção da chamada ajax.Para definir um padrão globalmente, você pode usar a função descrita aqui: http://api.jquery.com/jQuery.ajaxSetup .
fonte