有两个Page_Load没有覆盖

时间:2010-07-07 05:59:49

标签: c# asp.net override pageload

我有一个名为PageBase的类继承自ASP.NET Page。我想在PageBase的{​​{1}}中做点什么。我的应用程序中的所有页面都在Page_Load上完成了逻辑。 我正在考虑一种Page_Load Page_Load和其他页面运行的方式,而不必覆盖页面中的PageBase。可能吗?

1 个答案:

答案 0 :(得分: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.
        }
    }
}

修改

这是它的工作原理。

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