0

異なるネストされたマスターを持つアプリケーション全体で共有されるマスター マスターにデータをロードしているため、セットアップには 2 レベルのマスター ページが必要です。

そのため、今は Master Master が最初にデータをロードし、次に Nested Master にロードし、次に Page にロードする必要があります。

マスター レベルが 1 つしかないときは、次のようにロード オーダーを設定しました。

  1. ネストされたマスター - 初期化
  2. ページ - 読み込み

追加のマスター レベルを取得したので、次の順序でロードするにはどうすればよいですか?

  1. マスター マスター - ?
  2. ネストされたマスター - ?
  3. ページ - ?

ASP.NET は何らかの理由で最も内側のレベルを最初にロードするため、これは問題です。したがって、同じ関数を指定すると、ASP.NET は、理にかなった順序 (Master->Nested->Page) ではなく、Page->Nested->Master の順序で呼び出します。私の個人的な意見では、マスターページシステムを持つ目的を完全に無効にします。

4

1 に答える 1

1

簡単な答えは PreRender ですが、マスター ページの一部のロジックをビジネス オブジェクト/クラスに移動することでメリットが得られるように思えますか? 相互に依存する異なるマスター ページを持つことは、おそらく最良のアイデアではありません。データをグローバルに利用できるようにする必要がある場合は、ビジネス クラスにロードし、作成されたデータを適切な期間だけキャッシュします (要求だけが HttpContext.Items を使用する場合)。

その設定に固執する必要がある場合は、マスターページ階層を介して呼び出すオプションもあります。これにより、ルートマスター (最上位) がオプション/データを OnInit で使用できるようになります。これを必要とする他のものはすべて呼び出すことができます。これは、指定されたページ階層内のすべてのマスターページをループし、必要なタイプの最初のインスタンスを返すメソッドです。

/// <summary>
/// Iterates the (potentially) nested masterpage structure, looking for the specified type.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="currentMaster">The current master.</param>
/// <returns>Masterpage cast to specified type or null if not found.</returns>
public static T GetMasterPageOfType<T>(MasterPage currentMaster) where T : MasterPage
{
    T typedRtn = null;
    while (currentMaster != null)
    {
        typedRtn = currentMaster as T;
        if (typedRtn != null)
        {
            return typedRtn; //End here
        }

        currentMaster = currentMaster.Master; //One level up for next iteration
    }

    return null;
}

使用するには:

Helpers.GetMasterPageOfType<GlobalMaster>(this.Master);
于 2012-06-14T16:36:38.290 に答える