在.aspx和.ascx页面中捕获异常

时间:2020-03-06 14:46:08  来源:igfitidea点击:

该问题说明了一切,请使用以下示例代码:

<ul id="css-id">
    <li>
    <something:CustomControl ID="SomeThingElse" runat="server" />
    <something:OtherCustomControl runat="server" />
    </li>
</ul>

现在,如果在这些控件(位于母版页中)中某个地方引发错误,则它们将占用整个站点,那么如何捕获这些异常?

解决方案

我们可以在Global.asax页面/类中的所有地方捕获所有未处理的异常。
看着:

protected void Application_Error(Object sender, EventArgs e)

方法。

添加一个global.asax,以实现Application_Error处理程序。使用Server.GetLastError()函数获取引发的异常的句柄。

不幸的是,未处理的异常将始终使网站出错。
我们可以通过几种方法来防止这种情况。

  • 使用web.config中的部分显示用户友好的消息
  • 在Global.asax(或者自定义处理程序)中,捕获未处理的异常并做出相应的反应,就像这样

最好的解决方案

  • 确保控件不会抛出未处理的异常!

使用global.asax Application_Error方法,如如何使用Visual C.NET在ASP.NET中创建自定义错误报告页面中所述。

另一种方法是使用HTTP模块。这为我们提供了更大的灵活性(例如,我们可以处理来自多个应用程序的错误)。

我们是否想捕获并处理异常?

还是要防止死亡黄屏?如果我们试图防止黄屏死机,请查看处理HttpApplication上的Error事件(换句话说,在Global.asax中)。

有关更多详细信息,请参见下面的MSDN页面:
http://msdn.microsoft.com/zh-CN/library/system.web.httpapplication.error.aspx

特别是本段:

The exception that raises the Error event can be accessed by a call to the GetLastError method. If your application generates custom error output, suppress the default error message that is generated by ASP.NET by a call to the ClearError method.