2012-01-23 8 views
0

Pageを継承するクラス_Default内のPage_PreInit関数をオーバーライドしようとしています。私は次のエラーを取得するコンパイルしようとするただし、: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イベントを発生させます)。したがって、2つの選択肢があります。

オプション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内でAutoEventWireupFalseに設定しない限り、ASP.NETは自動的にこのメソッドをPreInitイベントにバインドします。

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

このオプションを選択した場合は、base.OnPreInitを呼び出さない、または他のあなたは無限再帰になってしまいます。

+0

ああ、感謝します。ありがとう! "オブジェクト参照がオブジェクトのインスタンスに設定されていません"というエラーが表示されます。 ここに: MasterPageFile = Master.Session ["selectedLayout"]; – shenn

+0

'Master.Session'ではなく' this.Session'を試してください。 –

+0

this.sessionは次のようになります:式タイプ 'メソッドグループ'に[]を適用できません – shenn

関連する問題