1

私の aspx ページ ページは基本クラスから駆動され、私の基本クラスは私の Web サイトの動的ヘッダーを作成します。「genMenu」というメソッドがあり、基本クラスの pageLoad イベント内で呼び出してメニューを作成します。一部のページでは、このメソッドをオーバーライドする必要がありますが、駆動ページの pageLoad の前に基本クラスのページ読み込みが発生することがわかっているためです。だから私は本当にそれをすることはできません。

では、どうすれば aspx ページで genMenu をオーバーライドし、基本クラス内で NoT を起動できますか。すべての駆動ページで genMenu 関数を手動で呼び出すことができ、基本クラスの pageLoad 内では呼び出すことができないことはわかっていますが、それを処理するより良い方法が必要です。

4

3 に答える 3

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
}
于 2012-09-21T18:52:57.157 に答える
1

明確化に基づいて更新:

基本クラスで、デフォルトで true を返すというvirtualメソッドを定義します。AutoCallGenMenu()基本クラスのページ読み込みで、そのメソッドの結果を確認し、true が返された場合は を呼び出しますgenMenu()

を手動で呼び出したいページではgenMenu()、オーバーライドAutoCallGenMenu()して false を返します。次に、必要な場所でメソッドを手動で呼び出すだけです。

于 2012-09-21T18:52:59.243 に答える
0

の代わりに、 orを使用してメソッドを呼び出して、 の前に発生pageLoadしないのはなぜですか?pageInitpage_initpage_load

を参照してください。実行順序のネット ページ ライフ サイクル。どの方法を使用するのが最適かを決定できます。

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

私はあなたの質問を誤解しているかもしれませんが、 tou は genmenu をオーバーライドして への呼び出しを無視することもできます.base()

于 2012-09-21T18:52:05.950 に答える