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

Evenement Error et UserControl, pas si simple que ca
Cette nuit m'est venu une problèmatique assez délicate.
 
Dans ma page, je charge plusieurs UserControl indépendants les uns des autres. Si l'un d'entre eux lance une exception il ne faut pas que ca empêche les autres de fonctionner, mais que cela affiche un message d'erreur à l'endroit ou est supposé être ce UserControl.
Or si on lance une exception dans un UserControl, celle ci est directement affiché et arrete l'execution de la page :-(
 
Je sais qu'un UserControl possede l'evenement Error qui selon la documentation "Occurs when an unhandled exception is thrown". Je m'abonne donc à l'evenement Error, lance une exception dans le load du UserControl et l'évenement n'est jamais lancé !!!
 
Me voila donc à la recherche d'explication. Avant de lancer Reflector, un petit tour sur mozbot qui me renvoie vers ce post : The not so clear Error event il explique en détail comment les erreurs sont gérés au sein d'une page (même pas besoin de lancer Reflector pour le voir de mes propres yeux :)). Tous se joue dans la méthode ProcessRequestMain(boolean, boolean) de l'objet Page (comme de trés nombreuses choses). Je ne vais pas rééxpliquer comment ca fonctionne puisque Victor Garcia Aprea le fait trés bien dans son post : The not so clear Error event et la conclusion à retenir est que l'évenement Error d'un UserControl ne sert à rien !
 
Sachant tout cela me voici à la recherche d'une solution. Ce que je veux c'est quand une exception est lancé dans mon UserControl, cela arrete le fonctionnement de celui ci et c'est tout! malheureusement aprés plusieurs heures de recherche et de test, je n'ai rien trouvé de réellement concluant. La seule solution que j'ai trouvé est de surchargé les méthodes OnEvent et d'entourer tout ca dans un bloc try :
 

Private lastError As Exception = Nothing

' on fait évidement la meme chose, pour OnInit, OnPrerender, etc...
Protected NotOverridable Overrides Sub OnLoad(ByVal e As System.EventArgs)
   Try
         If lastError Is Nothing Then
             MyBase.OnLoad(e)
         End If
    Catch ex As Exception
         lastError = ex
         Me.OnError(e)
    End Try
End Sub

Maintenant si une erreur est déclenché dans le load de l'UserControl, je la rattrape et l'evenement Error devient utile :)
 
Il me reste plus qu'a informer qu'il y a eu une erreur.
 

Private PlaceHolderError As PlaceHolder

Protected NotOverridable Overrides Sub OnError(ByVal e As System.EventArgs)
     ' on log
     ' CSP.Utilities.Logs.WriteLine(TraceLevel.Error, lastError)
     MyBase.OnError(e)
End Sub

Protected
NotOverridable Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
     Try
          If lastError Is Nothing Then
               MyBase.Render(writer)
          ElseIf PlaceHolderError IsNot Nothing Then
               PlaceHolderError.RenderControl(writer)
          End If
      Catch ex As Exception
          Me.OnError(EventArgs.Empty)
      End Try
End Sub

Le problème est que ces bidouilles n'arretent pas l'execution du UserControl ! :-( en plus on ne recupere pas toutes les erreurs si on fait ca :

Protected Overrides Sub CreateChildControls()
     Throw New Exception
     MyBase.CreateChildControls()
End Sub

Alors c'est toute la page qui plante :-(
 
La solution que je vous propose ici : http://www.aspfr.com/codes/EVITER-ERREURS-USERCONTROLS-ARRETENT-FONCTIONNEMENT-PAGE_36510.aspx n'est donc pas parfaite mais elle suffira dans beaucoup des cas.
 
Si quelqu'un a une solution ou juste une idée de solution, je serais ravis de l'entendre :-)
Posted: dimanche 12 mars 2006 14:39 par cyril
Classé sous : ,
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

Piotrek a dit :

Salut

A mon avis, Error c'est un evenement qu'il faut lancer depuis un custom control en cas d'interception d'erreur dans le controle.

Ensuite, le probleme est le meme pour les usercontrols en winforms. L'exception se propage et plante l'appli si elle n'est pas interceptee.
Il faut donc que le composant gere lui meme les erreurs (si il ne la gere pas on apelle ca un bug) et qu'il redessine son interface en fontion.

Ta solution semble correcte (idem en winforms cela consisterait a capter les erreurs lors du chargement des controles dans la form a travers les evenements)

Bien sur je ne connais pas le dev ASP.Net suffisement, mais aucun controle winforms bien concu (la textbox par exemple) ne renvoie d'exception
# mars 13, 2006 08:36
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- 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

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01