假设我有一个 Web 项目和一堆不同的 Web 表单,实际上所有不同的类都继承 System.Web.UI.Page
。
我认为在我的项目中使用的任何页面的 Page_Load
方法中添加一些字段、方法和一些事情会很棒。
即兴地,我想也许创建一个类,比如 MasterPage,它具有我想要的所有字段和方法(具有 protected
级别),并让该类继承 System.Web .UI.Page
.
那么我的项目中的每个页面现在都应该继承自 MasterPage,而不是 System.Web.UI.Page
。
虽然这有效,但也存在一些问题。
我无法真正轻松地“捕获”仍然从
System.Web.UI.Page
继承的表单。有简单的方法吗?由于其设置方式,MasterPage 的 PageLoad 是虚拟的,必须被覆盖,例如:
protected override void Page_Load(object sender, EventArgs e) { base.Page_Load(sender, e); // rest of stuff for this page... }
有没有更简单的方法可以让父级方法始终首先调用,而无需在每个页面中显式放入基调用?
请您参考如下方法:
另一种替代方法是创建从 Page 继承的父类(super class),然后将其自己的事件处理程序添加到 Page 事件中。有时很容易忘记您可以将任意数量的处理程序附加到事件。
namespace MyProject
{
public partial class CustomPage: System.Web.UI.Page
{
public CustomPage()
{
this.Init += new EventHandler(CustomPage_Init);
this.Load += new EventHandler(CustomPage_Load);
this.PreRender += new EventHandler(CustomPage_PreRender);
this.Unload += new EventHandler(CustomPage_Unload);
}
protected void CustomPage_Load(object sender, EventArgs e)
{
//do stuff
}
...
}
}
然后在您的页面中,只需继承并执行您通常执行的操作,两个事件都会触发。
namespace MyProject
{
public partial class NewPage: CustomPage
{
void Page_Load(object sender, EventArgs e)
{
//do more stuff
}
}
}