Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

UpdatePanels et gestion des erreurs

Avec les anciennes versions d'Atlas la gestion des erreurs avec les UpdatePanels n'étaient pas des plus simples. Depuis Microsoft Ajax extension Beta 1 les choses ont changé, on peut désormais personnaliser la façon dont le client obtient l'erreur.

Prenons un exemple :

<%@ Page Language="C#" AutoEventWireup="true" %> <script type="text/C#" runat="server"> protected void btn1_Click(object sender, EventArgs e) { throw new Exception("Ceci est le message"); } </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="SC1" runat="server" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Button ID="btn1" runat="server" Text="Error" OnClick="btn1_Click" /> <br /> <%=DateTime.Now.ToLongTimeString() %> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>

Si je clique sur le bouton contenu dans l'UpdatePanel une requête asynchrone va être lancée puis l'exception va être levée et enfin le message d'erreur va s'afficher dans une classique "alert" JavaScript. La première chose que l'on peut faire pour personnaliser ce comportement est de s'abonner à l'évenement AsyncPostBackError du ScriptManager :

<asp:ScriptManager ID="SC1" runat="server" OnAsyncPostBackError="SC1_AsyncPostBackError" />

Puis de renseigner la propriété AsyncPostBackErrorMessage du ScriptManager.

protected void SC1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { SC1.AsyncPostBackErrorMessage = "pas de chance, croise les doigts et essaye encore !!!"; }

On aura toujours une alert JavaScript mais avec un message qui fait beaucoup moins peur  :-) On peut aller encore plus loin en rajoutant quelques lignes de JavaScript :

<script type="text/javascript"> window.pageLoad = function(){ // On rajoute une fonction qui s'exécutera a tous les retours de requête Ajax Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender,e){ // On regarde si la requête s'est bien ou mal passé if(e.get_error()){ // On affiche le message d'erreur dans un div $get("error").innerText = e.get_error().description; // On avertit qu'on a traité l'erreur qu'il n'est pas nécessaire d'afficher l'alert JavaScript e.set_errorHandled( true ); } }); } </script>

Désormais l'utilisateur ne voit plus d'alert Javascript mais est avertis de l'erreur via le div d'id "error".

En tant que développeur on aime bien avoir des informations sur le StackTrace et pleins d'autres choses incompréhensible pour le commun des mortels, pour avoir accès à ces informations on peut modifier le code de la sorte :

protected void SC1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) { if (Context.IsDebuggingEnabled) { SC1.AsyncPostBackErrorMessage = e.Exception.ToString(); } else { SC1.AsyncPostBackErrorMessage = "pas de chance, croise les doigts et essaye encore !!!"; } }

 On voit donc que la gestion des erreurs au niveau des UpdatePanels peut être faite de manière beaucoup plus fine pour le bonheur des utilisateurs. :)


J'ai obtenu cette astuce à travers le blog de Luis Abreu : UpdatePanel: having fun with errors

Posted: mardi 28 novembre 2006 09:25 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

lutecefalco a dit :

Bonjour

Je viens de mettre en place cette solution.

Par contre, y a truc qui me chagrine:

e.get_error().description retourne bien le message que j'ai spécifié dans SC1_AsyncPostBackError mais il est précédé de Sys.WebForms.PageRequestManagerServerErrorException.

Y a un moyen de ne pas avoir ça ou il faut "couper" le message côté javascript?

Merci

# août 29, 2008 09:40
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [TechDays2012] Oui j’y serai! par Blog de Jérémy Jeanson le il y a 11 heures et 45 minutes

- TFS Integration Tools – Suivi des synchronisations avec Reporting Services par Vivien Fabing le 02-05-2012, 17:46

- CSS Content State Selectors (Personnal Draft) par Le blog de FremyCompany le 02-04-2012, 15:38

- MBA : Pourquoi faire et comment le choisir ? par Blog Technique de Romelard Fabrice le 02-03-2012, 14:22

- Y'a des erreurs qui peuvent rendre le développeur violent par Aleks's Blog le 02-02-2012, 16:33

- [Hyper-V 3] Présentation des commandlets PowerShell par Blog de SPBrouillet (Pierrick BROUILLET) le 01-31-2012, 16:01

- IIS7 – Compression GZIP par Atteint de JavaScriptite Aiguë [Cyril Durand] le 01-31-2012, 15:52

- SharePoint 15 Technical Preview Managed Object Model Software Development Kit par Matthew le 01-31-2012, 12:34

- Office 15 Technical Preview - Open specification Update par Matthew le 01-31-2012, 10:14

- TFS Integration Tools – Installation par Vivien Fabing le 01-31-2012, 00:06