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

Sharepoint (可视)web部件的顶级异常处理,sharepoint,exception-handling,moss,sharepoint-2010,web-parts,Sharepoint,Exception Handling,Moss,Sharepoint 2010,Web Parts,我对此进行了广泛的研究,发现如下: 通过实现基类,您可以做一些聪明的事情来捕获大多数错误,请参见Andreas Knudsen的解决方案 UserControl中的错误事件从未被触发,请参见此处的详细信息: 我找不到任何常规方法来捕获回发事件中发生的错误,例如web部件或用户控件级别的按钮单击事件。我所说的一般性是指我可以在基类中实现的东西 我知道我应该在代码中执行适当的try/catch,但对于大型团队,我希望确保web部件不会使页面崩溃,而是始终显示良好的消息,并允许对页面上的其他web部件

我对此进行了广泛的研究,发现如下:

  • 通过实现基类,您可以做一些聪明的事情来捕获大多数错误,请参见Andreas Knudsen的解决方案
  • UserControl中的错误事件从未被触发,请参见此处的详细信息:
  • 我找不到任何常规方法来捕获回发事件中发生的错误,例如web部件或用户控件级别的按钮单击事件。我所说的一般性是指我可以在基类中实现的东西

    我知道我应该在代码中执行适当的try/catch,但对于大型团队,我希望确保web部件不会使页面崩溃,而是始终显示良好的消息,并允许对页面上的其他web部件继续执行

    我认为这是不可能的,但我希望被证明是错的

    谢谢, Bjoern

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

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

    您可以做的是在系统中拥有一个所有页面都从中继承并覆盖RaisePostBackEvent(source,eventArgs)的基页。在此方法中,您可以查看源是否从异常处理基控件继承,或者是否包含在执行此操作的控件中。(浏览父图形) 如果它包含在一个中,则围绕对base.Raise….的调用执行try/catch(请参阅中的代码)
    )如果确实出现任何异常,请对发现的第一个候选人调用ExceptionOccessed方法。

    谢谢你的回答。这是一个有趣的想法,但不幸的是,我现在没有时间尝试它(项目压力)。总有一天我会的,因为如果它起作用的话会非常酷。我会告诉你怀疑的好处:)