IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Redéfinition de l'événement OnError


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Redéfinition de l'événement OnError
    Bonjour,

    Voilà, j'aimerai pouvoir catcher en dernier lieu toutes mes erreurs non gérées de manière à interrompre le chargement de la page et afficher un message d'erreur complet et convivial.

    J'ai essayé de redéfinir la méthode OnError de la classe Page (puisque j'ai déjà englobé la classe Page dans une classe maison), mais ça ne semble pas fonctionner... Je comprends pas trop pourquoi, vu que partout où on en parle on dit que ça fonctionne très bien et j'ai jamais lu qu'il fallait faire un truc particulier pour l'activer (au niveau du Web.config ?)...

    Voici mon code (très simple, pour le moment, j'aimerai juste qu'il y passe...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected override void OnError(EventArgs e)
    {
    	//base.OnError(e); // J'annule le traitement par défaut.
    	HttpContext.Current.Response.Write(Server.GetLastError().Message);
    }
    Seulement il continue à faire le traitement par défaut... Quelqu'un aurai une idée ?

    Merci !

  2. #2
    Membre Expert Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Par défaut
    Tu es sur qu'il s'agit de récupérer l'erreur au niveau de ta page? je n'ai pas trop touché à ça encore mais j'aurais juré que c'etait plus au niveau des objet de type application qu'il fallait intervenir...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bah en fait, normalement, tu peux récupérer les erreurs avec les try / catch dans tes classes. Seulement, si tu ne les catch pas, les exceptions remontent jusqu'à ta page (où tu peux les catcher encore si tu veux).

    Moi je voudrais au final, définir le comportement que l'application doit avoir quand elle rencontre une erreur que je n'ai pas catché (par exemple, une division par zéro imprévue ou des trucs comme ça qui sont bloquant pour l'appli mais qui ne sont pas intéressant à catcher au moment où ils arrivent puisqu'on ne peut rien faire de plus qu'afficher un message d'erreur).

    EDIT: Mais il y a bien une fonction OnError que l'on peut surcharger au niveau de la classe page et qui normalement devrait faire ça...

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Généralement, on fait ça dans le global.asax

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Par défaut
    Sur mon site, je le gère dans global.asax.cs avec la procédure application_error. Dès qu'une erreur se produit, cette procédure est exécutée.

    Voici un exemple très simple pour enregistrer les erreurs dans un journal (fichier plat ou base de données) et rediriger vers une page d'erreur générique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    protected void Application_Error(Object sender, EventArgs e)
    {
                //Enregistrement des erreurs dans un journal
                //Je n'ai pas mis le code de EnregistreErreur()
                //pour ne pas compliquer.
                Exception Erreur = Server.GetLastError();
     
                EnregistreErreur("ERREUR NIVEAU 1 : " + Erreur.Message);
     
                int Compteur = 2;
     
                while (Erreur.InnerException != null)
                {
                    Erreur = Erreur.InnerException;
                    EnregistreErreur("ERREUR NIVEAU " + Compteur.ToString() + " : " + Erreur.Message);
                    Compteur++;
                }
     
                //Redirection vers une page d'erreur
                Response.Redirect("GestionErreur.aspx");
    }
    Voilà, en espérant que cela répond à ta question

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci seminoque, j'ai fini par réussir à faire à peu près ce que je voulais grâce à ton exemple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pas d'événement OnClose quand on arrête W2K
    Par Altau dans le forum C++Builder
    Réponses: 9
    Dernier message: 26/01/2009, 18h36
  2. [JQuery] Redéfinition d'évènement
    Par adrien971 dans le forum jQuery
    Réponses: 10
    Dernier message: 25/11/2008, 14h32
  3. exploiter un évènement d'un sous composant dans un
    Par bjl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/12/2002, 16h44
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo