Jak obsłużyć wyjątki zgłaszane w kontrolerze, gdy jquery ajax wywołuje akcję?
Na przykład chciałbym mieć globalny kod javascript, który jest wykonywany na jakimkolwiek wyjątku serwera podczas wywołania ajax, które wyświetla komunikat o wyjątku, jeśli jest w trybie debugowania lub po prostu zwykły komunikat o błędzie.
Po stronie klienta wywołam funkcję dotyczącą błędu Ajax.
Czy po stronie serwera muszę napisać niestandardowy filtr akcji?
asp.net-mvc
jquery
asp.net-mvc-3
Shawn Mclean
źródło
źródło
Odpowiedzi:
Jeśli serwer wyśle kod stanu inny niż 200, zostanie wykonane wywołanie zwrotne błędu:
i aby zarejestrować globalną obsługę błędów, możesz użyć
$.ajaxSetup()
metody:Innym sposobem jest użycie JSON. Możesz więc napisać niestandardowy filtr akcji na serwerze, który wyłapuje wyjątki i przekształca je w odpowiedź JSON:
a następnie udekoruj akcję kontrolera tym atrybutem:
i na koniec przywołaj to:
źródło
error
wywołanie zwrotne zostanie wykonane.Po googlowaniu piszę prostą obsługę wyjątków w oparciu o filtr akcji MVC:
i napisz w global.ascx:
a następnie napisz ten skrypt na układzie lub stronie wzorcowej:
Na koniec powinieneś włączyć niestandardowy błąd. a potem ciesz się tym :)
źródło
Niestety żadna z odpowiedzi nie jest dla mnie dobra. Zaskakujące jest to, że rozwiązanie jest znacznie prostsze. Zwrot ze sterownika:
I obsłuż to jako standardowy błąd HTTP na kliencie, jak chcesz.
źródło
int
. Ponadto, kiedy to robię, wynik jest przekazywany doajax
success
procedury obsługi, a nie doerror
procedury obsługi. Czy to jest oczekiwane zachowanie?Zrobiłem szybkie rozwiązanie, ponieważ nie miałem czasu i zadziałało dobrze. Chociaż myślę, że lepszą opcją jest użycie filtru wyjątków, być może moje rozwiązanie może pomóc w przypadku, gdy potrzebne jest proste rozwiązanie.
Zrobiłem co następuje. W metodzie kontrolera zwróciłem JsonResult z właściwością „Success” wewnątrz Data:
Później w wywołaniu Ajax właśnie poprosiłem o tę właściwość, aby wiedzieć, czy mam wyjątek:
Mam nadzieję że to pomoże. Szczęśliwy kod! : P
źródło
Zgodnie z odpowiedzią aleho, oto kompletny przykład. Działa jak urok i jest super prosty.
Kod kontrolera
Kod JavaScript w widoku
Mam nadzieję, że to pomoże komuś innemu!
źródło
Aby obsługiwać błędy wywołane wywołaniami AJAX po stronie klienta, przypisujesz funkcję do
error
opcji wywołania Ajax.Aby ustawić wartość domyślną globalnie, możesz użyć funkcji opisanej tutaj: http://api.jquery.com/jQuery.ajaxSetup .
źródło