覆盖Page_PreInit时编译器错误

时间:2012-01-23 02:42:49

标签: c# asp.net events webforms master-pages

我正在尝试覆盖继承自Page_PreInit的班级_Default中的Page函数。但是,当我尝试编译时,我收到以下错误:

  

'_ Default.Page_PreInit(object,System.EventArgs)':找不到合适的方法来覆盖

这是我的代码:

public partial class _Default : Page
{
    protected override void Page_PreInit(object sender, EventArgs e)
    {
        // Todo:
        // The _Default class overrides the Page_PreInit method and sets the value
        //  of the MasterPageFile property to the current value in the 
        //  selectedLayout session variable.

        MasterPageFile = Master.Session["selectedLayout"];
    }

    ...
}

1 个答案:

答案 0 :(得分:5)

Page类声明名为PreInit的公共事件和名为OnPreInit的受保护虚拟方法(仅提升PreInit事件)。所以你有两个选择。

选项1(推荐):覆盖OnPreInit

protected override void OnPreInit(EventArgs e)
{
    // Set the master page here...

    base.OnPreInit(e);
}

致电base.OnPreInit(e),以便该网页像往常一样举起PreInit事件。

选项2:创建名为Page_PreInit的方法。只要您未在PreInit指令或Web.config中将AutoEventWireup设置为False,ASP.NET就会自动将此方法绑定到@Page事件。 / p>

private void Page_PreInit(object sender, EventArgs e)
{
    // Set the master page here...
}

如果选择此选项,请不要拨打base.OnPreInit,否则最终会收到无限递归。