2011-06-21 14 views
2

私は次のコードを持っている:マスターページを動的に変更する。マスターページから?

public abstract class BasePage : Page 
{ 
    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
      return; 

     var section = ConfigurationManager.GetSection("UrlRewriter/PlainRules"); 

     if (section == null) 
      SetMaster("~/App_Shared/Master/BaseRegular.Master"); 
     else 
      SetMaster("~/App_Shared/Master/BaseRewritable.Master"); 
    } 

    protected void SetMaster(string value) 
    { 
     MasterPage master = Master; 

     while (master != null) 
     { 
      if (master is SharedMaster) 
      { 
       master.MasterPageFile = value; 
       break; 
      } 

      master = master.Master; 
     } 
    } 
} 

それは動的に私のマスターページを変更することで素晴らしい作品が、私はSharedMasterからではなく、私が持っているすべての単一のページから直接これを行うことができるようにしたいと思います。

Page_PreInitはマスターページに置かれても起動しません。どのようにすればいいですか?

答えて

1

BasePageにこの機能を入れて、各ページをBasePageから継承すると、すべてのページでコードを繰り返す必要はありません。あなたはすでに完全な作業コードを持っているようです。

ロジックをマスターページに置く限り、マスタページがページに関連付けられ、コントロールツリーがロードされるため、マスターページを変更することはできません。 pre_initはマスターページがそのポイントまで読み込まれず、そのページに関連付けられたマスターページを一度変更することができるため、マスタページに対してトリガされません。その後、マスターページがロードされ、複合コントロールツリーが作成され、その後、マスターページイベントが受信されます。

+0

私はまだこのベースページをすべてのページで継承しなければなりませんでした。これは、私が避けたかったものです – bevacqua

+1

@Nico、共通のベースページから継承することは常に良い考えです。私はいくつかの共通機能を後の段階ですべてのページにプッシュするためにベースページを数回使用しました。 – VinayC

関連する問題