Académique Documents
Professionnel Documents
Culture Documents
NET Ajax
Version 1.0
James RAVAILLE
http://blogs.dotnet-france.com/jamesr
v1.0
15/01/09
Sommaire
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
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.
v1.0
15/01/09
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
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
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.
v1.0
15/01/09
v1.0
15/01/09
' 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).
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.
10
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>