我正在使用的 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?我需要操作的控件中存在 BaseClass 或 BasestClass 中不存在的控件。
答案 0 :(得分:2)
在执行Page_Load
事件方法期间会引发Load
(或OnLoad
)事件,所以我建议将逻辑移到那里。您不应该在您的子课程中覆盖OnLoad
方法时遇到问题。
答案 1 :(得分: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
就是您做事的地方。