Vous êtes sur la page 1sur 10

Gestion des erreurs dans les pages ASP .

NET Ajax
Version 1.0

James RAVAILLE
http://blogs.dotnet-france.com/jamesr

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

Sommaire

Introduction ..................................................................................................................................... 3 1.1 1.2 Prsentation ............................................................................................................................ 3 Pr-requis ................................................................................................................................ 3

2 3

Prsentation du comportement de base ........................................................................................ 4 Implmenter la gestion personnalise ASP .NET ............................................................................ 7 3.1 3.2 Implmentation de la gestion des erreurs personnalise....................................................... 7 Autorisation de la gestion des erreurs personnalise ............................................................. 7

Implmenter la gestion des erreurs en Ajax ................................................................................... 8 4.1 4.2 Personnaliser le message derreur et traiter lexception ct serveur ................................... 8 Grer et afficher lerreur ct client ....................................................................................... 8

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

1 Introduction
1.1 Prsentation
Comme prsent dans le chapitre sur les bases fondamentales dASP .NET Ajax, il est possible, via lutilisation du contrle UpdatePanel, de mettre jour des parties de pages. Nous vous proposons maintenant de voir, comment intercepter et grer les erreurs, survenant pendant ces mises jour.

1.2 Pr-requis
Avant de lire ce cours, il est ncessaire davoir lu le cours sur les bases fondamentales dASP .NET Ajax.

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

2 Prsentation du comportement de base


Avant de comprendre comment grer les erreurs lors de la mise jour partielle des pages, il convient de sintresser la manire dont elles sont gres par dfaut. Soit une page ASP .NET contenant un contrle ScriptManager, un contrle UpdatePanel, luimme contenant un contrle de type Label et un autre de type Button. Lvnement Click du bouton a t implment, de manire afficher dans le contrle de type Label, lheure et la date courante :
// C# <form id="FormAjax" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Date/heure courante : <asp:Label ID="LblDateHeureCourante" runat="server" Text=""></asp:Label> <br /> <br /> <asp:Button ID="CmdRafraichir" runat="server" Text="Rafraichir" onclick="CmdRafraichir_Click" /> </ContentTemplate> </asp:UpdatePanel> </form>

protected void CmdRafraichir_Click(object sender, EventArgs e) { LblDateHeureCourante.Text = DateTime.Now.ToString(); }

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

' VB.NET <form id="FormAjax" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Date/heure courante : <asp:Label ID="LblDateHeureCourante" runat="server" Text=""></asp:Label> <br /> <br /> <asp:Button ID="CmdRafraichir" runat="server" Text="Rafraichir" /> </ContentTemplate> </asp:UpdatePanel> </form> Protected Sub CmdRafraichir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdRafraichir.Click LblDateHeureCourante.Text = DateTime.Now.ToString() End Sub

On obtient alors le rsultat suivant :

Maintenant, dans ce code Si dans ce code, au lieu dafficher la date et lheure courante, on lve une exception, de manire provoquer explicitement une erreur :
// C# protected void CmdRafraichir_Click(object sender, EventArgs e) { //LblDateHeureCourante.Text = DateTime.Now.ToString(); throw new Exception("Erreur leve explicitement !"); }

' VB.NET Protected Sub CmdRafraichir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmdRafraichir.Click 'LblDateHeureCourante.Text = DateTime.Now.ToString() Throw New Exception("Erreur leve explicitement !") End Sub

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

Alors, lors de lexcution de la page ct client, dans Internet Explorer, on obtient lerreur suivante :

Nous conviendront que ce message derreur nest pas tellement explicit. En double-cliquant sur lerreur signale en bas gauche, la fentre suivante apparat :

Pour grer les erreurs, plusieurs possibilits soffrent nous. Nous en retiendrons deux : Utiliser la gestion des erreurs personnalises des applications ASP .NET (section customErrors du fichier de configuration de lapplication Web) Utiliser la gestion des erreurs proposes par ASP .NET Ajax, permettant : o De personnaliser la gestion et le message de lerreur ct serveur. o De traiter et afficher lerreur ct client.

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

3 Implmenter la gestion personnalise ASP .NET


3.1 Implmentation de la gestion des erreurs personnalise
Cette gestion derreur consiste dclarer dans le fichier de configuration de lapplication Web, une page excuter en fonction du code retour HTTP, de la rponse que le serveur renverra au client. Le code retour HTTP qui nous intresse est le code 500, autrement dit celui qui indique quune erreur dexcution est survenue lors du traitement de la requte sur le serveur Web. Ainsi, dans le fichier de configuration, on utilisera la section customErrors, de la manire suivante :
<customErrors mode="On"> <error statusCode="500" redirect="PageErreur.aspx" /> </customErrors>

3.2 Autorisation de la gestion des erreurs personnalise


Cette action est ncessaire, mais pas suffisante. Il est ncessaire dautoriser la gestion des erreurs personnalises ASP .NET, de manire ce quelle prenne le dessus , sur la gestion des erreurs propre ASP .NET Ajax. Pour ce faire, il faut valoriser la proprit AllowCustomErrorsRedirect true (false tant la valeur par dfaut) :
<asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="true"> </asp:ScriptManager>

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

4 Implmenter la gestion des erreurs en Ajax


4.1 Personnaliser le message derreur et traiter lexception ct serveur
Il est possible dintercepter lerreur ct serveur, en implmentant lvnement AsyncPostBackError sur le contrle ScriptManager :
// C# protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { ScriptManager1.AsyncPostBackErrorMessage = "Une erreur est survenue lors de la mise jour partielle de la page : " + e.Exception.Message; }

' VB.NET Protected Sub ScriptManager1_AsyncPostBackError(ByVal sender As Object, ByVal e As System.Web.UI.AsyncPostBackErrorEventArgs) Handles ScriptManager1.AsyncPostBackError ScriptManager1.AsyncPostBackErrorMessage = "Une erreur est survenue lors de la mise jour partielle de la page : " + e.Exception.Message End Sub

Cette action nest pas obligatoire. Par dfaut, la proprit AsyncPostBackErrorMessage du contrle ScriptManager, est valorise avec le message de lexception leve. Cette implmentation permet alors de personnaliser le message derreur, ou deffectuer toute autre action ncessaire au traitement de lexception leve (ct serveur bien sr).

4.2 Grer et afficher lerreur ct client


Dans notre page ASP .NET, ajoutons un autre un contrle de type Label et nomm LblMessageUtilisateur. Ce contrle contiendra le message derreur :

Dotnet France Association James RAVAILLE

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

// VB .NET et C# <form id="FormAjax" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" onasyncpostbackerror="ScriptManager1_AsyncPostBackError"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> Date/heure courante : <asp:Label ID="LblDateHeureCourante" runat="server" Text=""></asp:Label> <br /> <br /> <asp:Button ID="CmdRafraichir" runat="server" Text="Rafraichir" onclick="CmdRafraichir_Click" /> </ContentTemplate> </asp:UpdatePanel> <br /> <br /> <asp:Label ID="LblMessageUtilisateur" runat="server" Text=""></asp:Label> </form>

Pour grer les erreurs ct client (dans notre cas, afficher le message dans le contrle Label ajout), il est ncessaire dajouter un bloc de code JavaScript dans la page, qui raliserait les tches suivantes : Lors du chargement de la page ct client, demander excuter une fonction JavaScript, aprs lexcution de toute requte HTTP envoye par le client. Cette fonction JavaScript, doit vrifier si une erreur existe. Si tel est le cas, afficher ce message, dans le contrle LblMessageUtilisateur.

Dotnet France Association James RAVAILLE

10

Gestion des erreurs dans les pages ASP .NET Ajax

v1.0

15/01/09

// VB .NET et C# <script type="text/javascript" language="javascript"> function pageLoad() { var manager = Sys.WebForms.PageRequestManager.getInstance(); manager.add_endRequest(endRequest); } function endRequest(sender, args) { if (args.get_error() != null) { $get("LblMessageUtilisateur").innerHTML = args.get_error().message; args.set_errorHandled(true); } } </script>

Linstruction args.set_errorHandled(true); permet de signifier au navigateur, que lerreur rencontre a t traite.

Ainsi, on obtient le rsultat suivant :

Dotnet France Association James RAVAILLE

Vous aimerez peut-être aussi