2

我正在使用的ChildClass用户控件具有一系列父类,最终继承自System.Web.UI.UserControl

public BasestClass : AnotherClassExtendingUserControl
{
    private void Page_Load(object sender, EventArgs e)
    {
        // do some stuff
    }
}

public BaseClass : BasestClass
{
    // no Page_Load
}

链上的两个父类, Page_Load 被标记为private。“中间”类显然不会覆盖它,但我需要在ChildClass用户控件的 Page_Load 中添加一些内容。

public ChildClass : BaseClass
{
    // think I need to override Page_Load here,
    // but there is no acceptable method to override
}

我该怎么做才能进入ChildClass的 Page_Load ?该控件中有我需要操作的控件,这些控件在BaseClassBaseClass中不存在。

4

2 回答 2

2

The Page_Load (or Load) event gets raised during execution of the OnLoad event method, so I would suggest moving your logic there. You shouldn't have a problem overriding the OnLoad method from your child class.

于 2012-05-09T23:53:04.077 回答
1

我复制了你的课程,只是改变了两件事:

BasestClass : System.Web.UI.UserControl

这不应该改变任何东西,因为你说BasestClass最终继承自UserControl.

我还将它添加到 BasestClass.Page_Load:

Response.Write("BasePage_Load");

现在,要解决您的问题:

您可以向 ChildClass 添加构造函数并为 Load 事件添加事件处理程序。

public ChildClass()
{
        Load += new EventHandler(_Default_Load);
}

void _Default_Load(object sender, EventArgs e)
{
        Response.Write("Event Handler");
}

您还可以覆盖 OnPreRender:

protected override void OnPreRender(EventArgs e)
{
       base.OnPreRender(e);
       Response.Write("OnPreRender");
}

完成上述所有操作后,将在响应中输出:

Event Handler
BasePage_Load
OnPreRender

如果您想确保 的Page_Load方法BasestClass在您的新代码之前已经运行,OnPreRender那么就是您要做的事情的地方。

于 2012-05-09T23:42:22.667 回答