Thursday, November 20, 2008

Error handling with Global.asax and Update Panel

This morning while working with the Global.asax to handle my application level errors, I faced a very strange problem.

Despite of having a Error Handling routine in my Global.asax file, I was unable to trap an exception from the application and instead it was just throwing up a Message Box with the exception message.

So all my routine of logging the error and recording it into the DB was going without being executed.

After a fair bit of research, the UPDATEPANEL came out to be the culprit.

By its very design, UpdatePanels are designed not to bubble up the exception by default and thus it just pops up a Message Box and thus the Error handling routine in Global.asax was never called.

So to call this and feature a full post-back, we need to handle the AsyncPostBackError event of the Script Manager. Here is the code for that.
1. Add the following attribute to the Script Manager
OnAsyncPostBackError="scriptMan_AsyncPostBackError"
2. Create the event handler on the code behind
protected void scriptMan_AsyncPostBackError(object
sender, AsyncPostBackErrorEventArgs e)
{
MethodInfo preserveStackTrace =
typeof(Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance BindingFlags.NonPublic);
preserveStackTrace.Invoke(e.Exception, null);
throw e.Exception;
}

This would bubble up the event and Global.asax would be able to catch the exception thrown and here we could have our all cleanup routine for error trapping and recording.

-- Ashutosh

1 comment:

  1. Anonymous01:47

    Thanks, this was a huge help!

    ReplyDelete