类型为'System.StackOverflowException'发生在未知模块

本文关键字:未知 模块 System 类型 StackOverflowException | 更新日期: 2023-09-27 18:04:13

我经常遇到类型为"类型为'System的未处理异常"的错误。StackOverflowException' occurred in Unknown Module."。这种情况发生在代码基数相当大的网站上。但该错误仅在网站启动几分钟后出现。

这是错误指向的地方:

public partial class HealthInsurance : System.Web.UI.MasterPage
{
        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            Page.Header.DataBind();
        }
}

类型为'System.StackOverflowException'发生在未知模块

你不应该从autowired的Page_Load()处理器中调用OnLoad()的基类实现。

在底层,OnLoad()负责调用Page_Load(),因此您的代码最终处于无限递归循环中。

你只需要写:

protected void Page_Load(object sender, EventArgs e)
{
    Page.Header.DataBind();
}

如果您选择覆盖OnLoad()而不是依赖Page_Load(),情况将会有所不同。在这种情况下,您确实必须调用基类的方法:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    Page.Header.DataBind();
}

如果订阅Load事件,不要调用基本的OnLoad,因为基本的OnLoad负责触发Load事件,所以这将是一个无休止的循环。

但是,如果重写 OnLoad方法,那么调用基本OnLoad方法是合适的,例如
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    Page.Header.DataBind();
}

在上面的例子中,请注意override关键字。