Jag använder mig av en huvudsida som dynamiskt inkluderar användarkotroller. Jag har gjort en Sub i huvudsidan (CodeBehind) för felhantering som ser ut såhär: Varför inte skapa en class som tar hand om dina fel? Så slipper du använda en användar kontroll till det. Olika tips på hur du kan använda din error hantering effektivare. Mycket bra svarat med flera alternativa lösningar, vi tackar för detta!Anropa Sub i Page från UserControl
<code>
?????????????????? Sub Page_OnError(ByVal Exc As Exception)
'--> Vilken sida som orsakade felet
Dim strErrorPage As String = Request.ServerVariables("SCRIPT_NAME").ToString
'--> Själva felmeddelandet
Dim strErrorMessage As String = Exc.Message.ToString
'--> Vilken funktion som orsakade felet
Dim strTargetSite As String = Exc.TargetSite.ToString
'--> Mer detaljer angående felet
Dim strStackTrace As String = Exc.StackTrace.ToString
'--> Skickar användaren till felhanterar-sidan
Response.Redirect("SB_MainPage.aspx?UC=SB_Admin/SB_Shared/SB_ErrorPage.ascx&ErrorPage=" & strErrorPage & "&ErrorMessage=" & _
strErrorMessage & "&TargetSite=" & strTargetSite & "&StackTrace=" & strStackTrace)
End Sub
</code>
Jag vill veta hur jag ifrån min användarkontroll kan anropa denna sub när fel uppstår, typ:
<code>
'--> Fångar upp felmeddelande
Catch Exc As Exception
'--> Ett allmänt fel har inträffat
' detta tas hand om felhanteraren
?????????????????? Page_OnError(Exc)
End Try
</code>Sv: Anropa Sub i Page från UserControl
Typ.
<code>
catch(Exception exception)
ExceptionManager.Publish(exception);
</code>
Annars kan du komma åt din metod från kontrollen du inkluderat på sidan.
Så som du gör med dina andra kontroller under codebehind.
Annars har du ju global.asax som kan hantera dina fel om du vill.
//Johan NSv: Anropa Sub i Page från UserControl
I ditt fall så verkar du vilja ha en metod som hanterar felet på varje sida. Gör då följande, lägga till Page_Error den triggars automatiskt om något går fel på din sida.
<code>
Private Sub Page_Error(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles MyBase.Error
Dim ex As Exception = Server.GetLastError()
Session("Error") = ex.Message()
Server.ClearError()
Response.Redirect("myErrorPage.aspx")
End Sub
</code>
Den sidan som applikationen redirektar till skriver du tex något likt detta:
<code>
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
If Session("Error") <> Nothing Then
lblError.Text = "<p>The following error occurred:</p>" & Session("Error") & "<br>"
Session("Error") = Nothing
End If
End Sub
</code>
Här kommer andra alternativ:
Du kan på din sida lägga till errorPage="errDefault.aspx" attributet i din Page deklaration <%@ Page %>
När ett fel uppstår på sidan så redirectar den automatiskt till den sidan du har angivit, för att sedan få tag i felet kan du tex göra följande i Page_Load på din error sida:
<code>
' errDefault.aspx
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
lblError.Text = Server.GetLastError.Message
Server.ClearError()
End Sub
</code>
Ett annat alternativ om du vill att alla sidor i din applikation ska gå mot en och samma error sida är att sätta customError i din web.config
<code>
<customErrors mode="On" defaultRedirect="ErrDefault.aspx">
</code>
Eller anvädna dig av Application_Error i web.config som triggar på alla fel som uppstår i din applikation.
Det är bara att välja och braka..
/Fredrik NSv: Anropa Sub i Page från UserControl