Link to home
Start Free TrialLog in
Avatar of caoimhincryan
caoimhincryan

asked on

Call Control from master page using OnError method

I am using VS 2005. I have a web page designed using Ajax and ASP.NET , VB.Net is code behind.
In my master page I have a panel that visible property is set to false. In this panel i have a message I want to display when an error occurs in my application.
E.G. List.aspx page - To catch the error i have a method

Protected Overrides Sub OnError(ByVal e As System.EventArgs)
        MyBase.OnError(e)

        '    'do stuff here
        UpdatePanel1.Visible = False

        CType(Me.Form.Parent.FindControl("ErrorHandlerPanel"), Panel).Visible = True ' This is the panel on my master page
       
        Response.Write(Server.GetLastError().Message)

        Server.ClearError()

    End Sub

To test this in my application I have added Throw New ApplicationException("Blahh") on my page load event.

All thats displayed is "Blahh" . Would anyone know how to display my panel from my master page?

However, if I remove Throw New ApplicationException("Blahh") and add CType(Me.Form.Parent.FindControl("ErrorHandlerPanel"), Panel).Visible = True into the onLoad event, it will display fine.
It just seems that the problem is getting the panel to display from the onError method.

Any ideas?
Avatar of ventaur
ventaur
Flag of United States of America image

You cannot call Response.Write in your method. Doing so will usually wipe out your controls and mess up the rendering of the page.

If you'd like to show the message inside your panel, try this instead. You could even put this in the master page instead.
Protected Overrides Sub OnError(ByVal e As System.EventArgs)
  MyBase.OnError(e)
  
  ...
 
  ' Get the error panel from the master page.
  Dim ErrorPanel As Panel = CType(Me.Form.Parent.FindControl("ErrorHandlerPanel"), Panel)
  
  ' Add the error message to the panel and show it.
  Dim ErrorMessage As New LiteralControl(Server.GetLastError().Message)
  ErrorPanel.Controls.Clear()
  ErrorPanel.Controls.Add(ErrorMessage)
  ErrorPanel.Visible = True
 
  Server.ClearError()
End Sub

Open in new window

Avatar of caoimhincryan
caoimhincryan

ASKER

Hi Ventaur,

Thanks for the quick response.

However all that is displaying is a blank screen.

Any ideas?
ASKER CERTIFIED SOLUTION
Avatar of ventaur
ventaur
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
I agree with you ventaur. I will leave the question open another while to see if anyone has other ideas for the question.
Understood. Good luck!
Are your users going to debug and fix your application?  They why display the error message to them?  I personally email errors to the programmers, and redirect the user to a basic page saying "whoops".
I thought maybe with Ajax that it might be possible instead of an error page. Error page is the way to go.