基类和派生页面加载事件

时间:2012-09-21 18:48:25

标签: asp.net

我的aspx页面是从基类驱动的,我的基类创建了我的网站的动态标题。我有一个名为“genMenu”的方法,我在基类的pageLoad事件中调用以创建菜单。 在某些页面中,我需要覆盖此方法,但是因为我们知道基页类的页面加载在页面加载页面之前加载。所以我真的不能这样做。

那么如何在aspx页面中覆盖genMenu并且NoT在基类中触发它。我知道我可以手动调用所有驱动页面中的genMenu函数,而不是在基类的pageLoad中调用它,但必须有更好的方法来处理它。

3 个答案:

答案 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,为什么不使用pageInitpage_init来调用您的方法,以便它在page_load之前发生?

参考。执行顺序的网页生命周期,然后您可以决定最好使用哪种方法

http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx

我可能误解了你的问题,但是tou也可以覆盖你的genmenu并忽略对.base()

的召唤