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?
caoimhincryanAsked:
Who is Participating?
 
ventaurConnect With a Mentor Commented:
I see now. That's apparently by design, because the exception stops code execution, which prevents controls from being rendered (Page and MasterPage included).

Your best bet will be to use custom errors and create a default error page. You can set that up in your web.config file. Otherwise, I think you may be out of luck with your design.
<customErrors mode="On" defaultRedirect="ErrorPage.aspx" />

Open in new window

0
 
ventaurCommented:
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

0
 
caoimhincryanAuthor Commented:
Hi Ventaur,

Thanks for the quick response.

However all that is displaying is a blank screen.

Any ideas?
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

 
caoimhincryanAuthor Commented:
I agree with you ventaur. I will leave the question open another while to see if anyone has other ideas for the question.
0
 
ventaurCommented:
Understood. Good luck!
0
 
raterusCommented:
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".
0
 
caoimhincryanAuthor Commented:
I thought maybe with Ajax that it might be possible instead of an error page. Error page is the way to go.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.