有两个Page_Load没有覆盖

Afs*_*bbi 1 c# asp.net overriding pageload

我有一个名为PageBase继承自ASP.NET 的类Page.我想要做的东西PageBasePage_Load.我的应用程序中的所有页面都在其上完成了逻辑Page_Load.我正在考虑一种方式,Page_Load无论是在页面PageBase中还是Page_Load在页面中都可以运行.可能吗?

thi*_*eek 7

是的,这是可能的.只需在构造函数中附加Page_Load处理程序即可.这就是你如何做到的.

/// <summary>
/// Your PageBase class.
/// </summary>
public class PageBase : System.Web.UI.Page
{
    /// <summary>
    /// Initializes a new instance of the Page class.
    /// </summary>
    public Page()
    {
        this.Load += new EventHandler(this.Page_Load);
    }

    /// <summary>
    /// Your Page Load
    /// </summary>
    /// <param name="sender">sender as object</param>
    /// <param name="e">Event arguments</param>
    private void Page_Load(object sender, EventArgs e)
    {
        try
        {
        }
        catch
        {
             //handle the situation gracefully.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

这是它的工作原理.

Load是声明的公共事件,System.Web.UI.Page其中继承在PageBase类中.由于这是一个事件,您可以在事件上附加多个处理程序,每当Load引发事件时都会调用/执行它们.在PageBase类中,我们将事件处理程序例程附加到Load事件.这是更好的方法,而不是继承OnLoad保护的例程,您需要显式调用基本版本.当创建/实例化实际的Page对象时,首先创建基类对象,然后实例化子类,因此当构造PageBase对象时,事件处理程序附加到Load事件,每当Page对象触发时都会调用它.加载事件.