一个DNN模块中的异常会阻止处理页面上的所有其他模块

And*_*ndy 3 c# dotnetnuke dotnetnuke-module

我正在研究DNN 6.0网站上的一般问题:一个DNN模块中的无法处理的异常会影响处理页面上的所有其他模块.例:

假设我有DNN页面,上面有两个模块.Module1具有onclick事件处理程序抛出异常的按钮.Module2只有一些标签文字.

因此,当用户按下Module1.button时,我们看到错误而不是Module1,而Module2不可见.

是否有可能在一个地方捕获所有这些Module1异常并让DNN处理页面上的其他模块?(我知道最简单/最简单的方法是在button.onclick中编写try/catch块,但是我不能在我们创建的所有模块中实现这样的方法,因为它需要很长时间.)

Bri*_*ter 5

你提出了正确的答案.

实现try/catch块并使用以下功能

  • LogException() - 记录错误,不会停止加载模块
  • ProcessModuleLoadException() - 记录错误,暂停加载模块

示例代码:

try
{
    //BLAH
}
catch (Exception exc) //Module failed to load
{
    Exceptions.ProcessModuleLoadException(this, exc);
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,@ hamlin11是正确的.如果您没有自己捕获异常,DNN将完全爆炸.在没有触及所有事件处理代码的情况下,没有解决方法(我知道)实现它.您可能能够定义一个泛型函数,该函数接受委托并在`try` /`catch`块中调用它,然后更改`this.Load + = this.Page_Load`和`this.SubmitButton.Click + = this. SubmitButton_Click` into`his.Load + =(s,a)=> HandleExceptions(s,a,this.Page_Load)`和`this.SubmitButton.Click + =(s,a)=> HandleExceptions(s,a,this .SubmitButton.Click)`. (2认同)