(可视)Web部件的顶级异常处理

时间:2010-09-13 10:28:13

标签: sharepoint exception-handling moss sharepoint-2010 web-parts

我对此进行了广泛的研究,并且我发现了以下内容:

  1. 你可以通过实现基类来做一些聪明的事情来捕获大多数错误,请参阅Andreas Knudsen的解决方案。
  2. UserControl中的错误事件永远不会被触发,请参阅此处的详细信息:http://weblogs.asp.net/vga/archive/2003/06/16/8748.aspx
  3. 我找不到的是捕获回发事件中发生的错误的任何一般方法,例如按钮的单击事件,Web部件或用户控件级别。我的意思是一般是我可以在基类中实现的东西。

    我知道我应该在我的代码中进行正确的try / catch,但对于大型团队,我希望确保Web部件永远不会崩溃页面,但总是显示一条好消息并允许执行继续对于页面上的其他Web部件。

    我不认为这是可能的,但我被证明是错误的。

    谢谢, 比约恩

1 个答案:

答案 0 :(得分:0)

认为这是可能的,但你必须解决这样一个事实:当asp.net分发回发事件时,它不关心你的用户控件定义,而只关心显式实现IPostBackEventHandler的控件(如按钮/下拉等)

对于页面,您可以覆盖并尝试/捕获RaisedPostBackEvent,就像其他方法一样。 (如果你想要一个通用的页面异常处理设置。(如果你想要这个,那么请重新考虑。我在上一个项目上花了太多时间基本上重新实现了默认的asp.net异常处理逻辑,只是为了让它工作。恶魔的细节)

你可以做的是在你的系统中有一个基页,所有页面都继承,并覆盖RaisePostBackEvent(source,eventArgs)。在此方法中,您可以查看源是否继承自异常处理基本控件,或者它是否包含在执行此操作的控件中。 (导航父图) 如果它被一个包含,那么在base.Raise ....的调用周围做一个try / catch(参见下面的代码) Transparent generic exception handling for asp.net / MOSS2007 (with code))并且如果确实发生任何异常,则在您找到的第一个候选人上调用exceptionhappened方法。