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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01