2012-01-23 48 views
0

我想覆盖我的类_Default中的Page_PreInit函数,它继承自Page。然而,当我尝试编译我收到以下错误:覆盖时编译错误Page_PreInit

'_Default.Page_PreInit(object, System.EventArgs)': no suitable method found to override

这里是我的代码:

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"]; 
    } 

    ... 
} 

回答

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的方法。只要您没有在@Page指令或Web.config中将AutoEventWireup设置为False,ASP.NET就会自动将此方法绑定到PreInit事件。

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

如果选择此选项,不叫base.OnPreInit,否则你会落得一个无限递归。

+0

哦,好吧,这很有道理,谢谢! 仍存在错误“未将对象引用设置为对象的实例”。 here: MasterPageFile = Master.Session [“selectedLayout”]; – shenn

+0

尝试'this.Session'而不是'Master.Session'。 –

+0

this.session带有:不能将[]应用于表达式类型'method group' – shenn