Accueil > > > EVITER QUE LES ERREURS DES USERCONTROLS, ARRETENT LE FONCTIONNEMENT DE LA PAGE
EVITER QUE LES ERREURS DES USERCONTROLS, ARRETENT LE FONCTIONNEMENT DE LA PAGE
Information sur la source
Description
Dans un de mes projets, je rajoute de nombreux UserControl dans ma page, mais si un Exception est lancé dans celui ci, je ne voulais pas que l'execution de la page s'arrete mais seulement l'execution du UserControl.
aprés beaucoup de recherche et test, je n'ai rien trouvé de rééellement convaincant :( la solution que je vous propose et de faire un overrides sur tous les lanceurs d'évenement "onLoad", "OnPreRender", etc... et de mettre un try catch dedans, ainsi toutes les erreurs liés au code de l'abonnement des événéments n'interferons pas la page.
Un exemple valant mieux qu'un long discours :
Nous avons un UserControl qui dans son load lance une Exception, normalement l'execution de la page s'arrete et affiche l'erreur. En héritant votre UserControl de monUserControl (la classe que j'ai écrites ci dessous) s'il y a une exception dans le load de la page, l'erreur sera capturé, et les autres événements ne seront pas déclenché mis à part l'evenement Error
Source
- Imports Microsoft.VisualBasic
- Imports System.Web
-
- Public MustInherit Class MonUserControl
- Inherits System.Web.UI.UserControl
-
- #Region " Gestion des exceptions dans l'UC "
-
- ' En faisant ces bidouilles, il y a trés peu de risques qu'un UC fasse planter toutes la page
- ' en tout cas c'est la meilleure facon que j'ai trouvé. Le mieux aurait été de pouvoir arreter
- ' tout fonctionnement de l'UC, mais ca m'a l'air impossible
-
- Private lastError As Exception = Nothing
- Private PlaceHolderError As PlaceHolder
-
- 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
-
- Protected NotOverridable Overrides Sub OnInit(ByVal e As System.EventArgs)
- Try
- If lastError Is Nothing Then
- MyBase.OnInit(e)
- End If
- Catch ex As Exception
- lastError = ex
- Me.OnError(e)
- End Try
- End Sub
-
- Protected NotOverridable Overrides Sub OnPreRender(ByVal e As System.EventArgs)
- Try
- If lastError Is Nothing Then
- MyBase.OnPreRender(e)
- End If
- Catch ex As Exception
- lastError = ex
- Me.OnError(e)
- End Try
- End Sub
-
- 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
-
- ''' <summary>
- ''' on recupere les éventuelles erreurs provoqués dans le UserControl
- ''' </summary>
- ''' <param name="sender"></param>
- ''' <param name="e"></param>
- ''' <remarks></remarks>
- Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
- If PlaceHolderError Is Nothing Then
- PlaceHolderError = New PlaceHolder
- End If
- PlaceHolderError.Controls.Add(New LiteralControl("Une erreur a été détécté dans cet UserControl"))
- End Sub
-
- #End Region
-
-
- End Class
Imports Microsoft.VisualBasic
Imports System.Web
Public MustInherit Class MonUserControl
Inherits System.Web.UI.UserControl
#Region " Gestion des exceptions dans l'UC "
' En faisant ces bidouilles, il y a trés peu de risques qu'un UC fasse planter toutes la page
' en tout cas c'est la meilleure facon que j'ai trouvé. Le mieux aurait été de pouvoir arreter
' tout fonctionnement de l'UC, mais ca m'a l'air impossible
Private lastError As Exception = Nothing
Private PlaceHolderError As PlaceHolder
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
Protected NotOverridable Overrides Sub OnInit(ByVal e As System.EventArgs)
Try
If lastError Is Nothing Then
MyBase.OnInit(e)
End If
Catch ex As Exception
lastError = ex
Me.OnError(e)
End Try
End Sub
Protected NotOverridable Overrides Sub OnPreRender(ByVal e As System.EventArgs)
Try
If lastError Is Nothing Then
MyBase.OnPreRender(e)
End If
Catch ex As Exception
lastError = ex
Me.OnError(e)
End Try
End Sub
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
''' <summary>
''' on recupere les éventuelles erreurs provoqués dans le UserControl
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
If PlaceHolderError Is Nothing Then
PlaceHolderError = New PlaceHolder
End If
PlaceHolderError.Controls.Add(New LiteralControl("Une erreur a été détécté dans cet UserControl"))
End Sub
#End Region
End Class
Conclusion
Dans le zip, un exemple de mis en scéne
Un post trés interessant sur l'événement Error : http://weblogs.asp.net/vga/archive/2003/06/16/8748 .aspx
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
recuperer evenement dans un usercontrol [ par 6miK ]
Bonjour,j'aimerais savoir comment on peut récupérer un évenement dans un usercontrol.J'ai fait mon en-tête dans un user control et j'aurais aimer pouv
capture d'evenement [ par sorcier_sly ]
Salut tout le monde,Je vous ecris car j'ai un probleme pour intercepter un evenement.Donc j'ai une page aspx, qui contient un placeholder. Je ch
evenement usercontrol [ par GILLOUXG ]
Bonjour,Je vous expose mon problème:Depuis une page aspx je charge dynamiquement un UserControl qui contient un bouton.Lorsque je clic sur le bouton,
Evenement et UserControl [ par darunia ]
Je voudrais faire remonter un evenement d'un UserControl :public event EventHandler OnClick; protected void bouton_Click(object sender, EventArgs e
intercepter un evenement [ par sorcier_sly ]
bonjour, Je suis en train de developper 2 UserControl et j'arrive pas a intercepter un evenenement. En fait, j'ai un premier UserControl contenant un
UserControl et Event [ par Thanos_the_yopper ]
Bonjour, Je fais un site en ASP.Net avec le framework 2.0 et VS2005. J'ai fait un UserControl qui contient des boutons et je voudrais que quand je cl
UserControl dans un datagrid [ par Sobieski ]
Hello,Je vous explique mon problème :J'ai créé un usercontrol constitué de plusieurs panelJ'ai un datagrid avec 5 colonnes : une a
Datagrid [ par Sobieski ]
Salut !J'ai une question (étonnant hein ?)J'ai un Datagrid. Quand je cliques sur Edit ca affiche en dessous un usercontrol qui contient
datagrid et evenement [ par sorcier_sly ]
Saut,Je souhaiterais pouvoir intercepter un evenement associé a une datagrid. En fait, dans ma datagrid, sur chaque ligne, j'ai une imagebutton.J
probleme de cast [ par sorcier_sly ]
Salut tout le monde,J'ai un probleme de cast et j'arrive pas a le resoudre. J'ai une page aspx (appelé demarrage) contenant 2 panels.Ces 2 panels
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GRIDVIEW CHECKBOXGRIDVIEW CHECKBOX par invent001
Cliquez pour lire la suite par invent001 OUTIL MYSQLOUTIL MYSQL par nobla
Cliquez pour lire la suite par nobla
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|