comment attraper exception de la MVC vue?
Contrôleur, try...catch peut attraper une exception. Comment attraper une exception en vue? par exemple, une vue peut avoir un code comme:
<%= Html.Encode(Model.MyID)%>
Si le Modèle est nulle, vous obtiendrez exception lors de l'accès à la vue. où prendre de l'exception et de rediriger l'utilisateur vers une page d'erreur avec le message d'erreur conviviale?
Quelle technologie utilisez-vous?
MS ASP.NET framework MVC
Je ne voudrais pas utiliser les exceptions pour les non-exceptionnelles comportement et certainement pas dans la vue.
Voici une solution pour Verger module views: stackoverflow.com/a/29536117/3936440
MS ASP.NET framework MVC
Je ne voudrais pas utiliser les exceptions pour les non-exceptionnelles comportement et certainement pas dans la vue.
Voici une solution pour Verger module views: stackoverflow.com/a/29536117/3936440
OriginalL'auteur KentZhou | 2009-07-02
Vous devez vous connecter pour publier un commentaire.
Il suffit d'ajouter l' [HandleError] attribut vers le haut de votre Contrôleur de classe. De cette façon, toutes les exceptions générées par votre commande sera traitée et l'utilisateur sera présenté /Views/Shared/Erreur.aspx. Le modèle adopté ce point de vue est un Système.Web.Mvc.HandleErrorInfo objet.
Le contrôleur:
C'est pour un "dernier recours" la gestion des exceptions. David répond le mieux pour ces cas, vous pouvez penser à l'avance.
OriginalL'auteur
Envisager d'utiliser Elmah: http://code.google.com/p/elmah/
OriginalL'auteur
Bien que je soutiens David Liddle de la réponse ("Cette logique devrait être traité à l'intérieur de votre Contrôleur et non de la Vue"), je peux également vous dire que vous devriez code défensivement en général.
Par exemple, au lieu de
vous devriez
(bien sûr, encore une fois, ne mettez pas de sélection de la vue logique vue)
@
avantif
etelse
?OriginalL'auteur
Bien, vous ne pouvez pas toujours prendre chaque erreur dans le contrôleur, mais j'espère que de votre point de vue devrait être assez légers où il est très peu probable que cela arrive.
Toutefois, si une exception est levée dans la vue, vous devriez avoir un custom page d'erreur 500 configuré pour rediriger l'utilisateur vers juste au cas où. Je crois que vous pouvez configurer une redirection de ce genre dans le monde.asax ou il pourrait être un paramètre IIS.
OriginalL'auteur
Cette logique devrait être traité à l'intérieur de votre Contrôleur et non de la Vue. Par exemple, si vous essayez d'afficher un Produit avec MyID qui n'existe pas, alors rediriger vers une page d'erreur.
Si une erreur s'est produite vous pouvez également rediriger vers une InvalidProduct vue qui serait une description détaillée de l'erreur ou les instructions.
Edit: En plus des peuples commentaires ci-dessous pour attraper les exceptions non gérées ajouter le [HandleError] attribut soit sur votre ActionResult déclaration de la méthode ou sur le Contrôleur (pour tous les ActionResults).
Votre application doit "fail fast". Vous ne pouvez pas gérer une exception que vous ne connaissez pas, de toute façon.
Ce n'est pas une réponse à la discussion de la question. Bien sûr, c'est mieux d'avoir ce genre de logique dans le contrôleur, mais c'est toujours pas une réponse. Je suis en train de travailler sur un site prototype à un client lorsqu'il faut environ 15 minutes pour télécharger des fichiers. Les vues peuvent être modifiés dans le bloc-notes, mais de modifier le contrôleur, j'ai recompiler sur ma machine et de télécharger les fichiers binaires. Donc je suis en utilisant le point de Vue d'essayer des choses. Mais je ne vois pas les exceptions, car ils sont cachés par certains proxy entre moi et le serveur, et ils n'apparaissent pas dans les journaux. Toujours à la recherche d'une solution.
OriginalL'auteur
Vous pouvez utiliser try/catch dans un bloc de script dans la vue:
OriginalL'auteur
Je suis d'accord avec Matthieu Bosquets que vous ne pouvez pas toujours prendre toutes les erreurs. Malheureusement, dans mon cas, j'ai une vue qui a quelque chose de 100 variables. Il est difficile de rendre compte de tous.
Il y a une variété de façons pour détecter les erreurs ici: http://www.codeproject.com/Articles/850062/Exception-handling-in-ASP-NET-MVC-methods-explaine
Dans mon cas, j'ai voulu enregistrer l'erreur qui s'est produite dans la vue avec les données qui a été utilisée dans le contrôleur. J'ai donc choisi de remplacer OnException dans mon contrôleur. De cette façon, au cours de l'action, je peux stocker mes données sur l'instance du contrôleur et y accéder plus tard dans la OnException méthode.
OriginalL'auteur