3

我经常遇到“未知模块中发生'System.StackOverflowException'类型的未处理异常”类型的错误。这发生在具有相当大代码库的网站中。但是该错误仅在该网站的几分钟后发生。

这是错误指向我的地方:

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

2 回答 2

4

您不应从自动装配的处理程序调用OnLoad()的基类实现。Page_Load()

在幕后,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();
}
于 2013-03-17T12:11:52.017 回答
1

如果您正在订阅Load事件,请不要调用 base OnLoad,因为 baseOnLoad负责触发Load事件,因此这将是一个无限循环。

但是,如果您要覆盖OnLoad方法,那么调用基本OnLoad方法是合适的,例如

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

在上述情况下,请注意override关键字。

于 2013-03-17T12:16:43.123 回答