我的aspx页面是从基类驱动的,我的基类创建了我的网站的动态标题。我有一个名为“genMenu”的方法,我在基类的pageLoad事件中调用以创建菜单。 在某些页面中,我需要覆盖此方法,但是因为我们知道基页类的页面加载在页面加载页面之前加载。所以我真的不能这样做。
那么如何在aspx页面中覆盖genMenu并且NoT在基类中触发它。我知道我可以手动调用所有驱动页面中的genMenu函数,而不是在基类的pageLoad中调用它,但必须有更好的方法来处理它。
答案 0 :(得分:1)
创建一个名为GenerateMenu
的虚拟方法或类似的方法,并始终从基页调用它。做那里的实际工作。然后,需要拦截它的派生页面可以覆盖它。
,例如:
// Base page
protected SomeType MenuVariable;
protected void Page_Load(object sender, EventArgs e)
{
this.GenerateMenu();
}
protected override void OnInit(EventArgs e) {
this.GetMenuVariable();
}
private void GetMenuVariable() {
// Some stuff with query string or the database
this.MenuVariable = FooBar();
}
protected virtual void GenerateMenu() {
// Generate the menu here
}
和
// Derived page
protected override void GenerateMenu() {
// Calls from the base page Load event
// will be intercepted by this override
// Do the alternate work for this page
// here
}
答案 1 :(得分:1)
根据澄清更新:
在基类中,定义名为virtual
的{{1}}方法,默认情况下返回true。在基类中加载页面时,检查该方法的结果,如果返回true,则调用AutoCallGenMenu()
。
在您要手动调用genMenu()
的页面中,覆盖genMenu()
以返回false。然后,只需手动调用您需要的方法。
答案 2 :(得分:0)
而不是pageLoad
,为什么不使用pageInit
或page_init
来调用您的方法,以便它在page_load
之前发生?
参考。执行顺序的网页生命周期,然后您可以决定最好使用哪种方法
http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx
我可能误解了你的问题,但是tou也可以覆盖你的genmenu并忽略对.base()