2011-06-21 92 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

我仍然必須在所有頁面中繼承此BasePage,這是我想避免 – bevacqua

+1

@Nico,從常見的基本頁面繼承始終是一個好主意。我已經多次使用基本頁面,以便在稍後階段將一些常用功能推送到所有頁面中。 – VinayC