2009-01-20 97 views
0

我想能夠在網關頁面中設置ASP.NET主題,它將根據合作伙伴ID或類似的內容確定主題。我想我只是在會話中粘貼主題名稱,如果需要,可以從此處獲取。如何在「網關」頁面中設置ASP.NET網站的主題?

我很難找到合適的地方把這段代碼放在一個地方。

我似乎無法看到一個全球的地方,你可以設置主題。您必須爲每個頁面設置它。

MSDN中所述,您可以在頁面的PreInit函數中分配Theme屬性。

Protected void Page_PreInit(object sender, EventArgs e) 
{ 
    switch (Request.QueryString["theme"]) 
    { 
     case "Blue": 
      Page.Theme = "BlueTheme"; 
      break; 

     case "Pink": 
      Page.Theme = "PinkTheme"; 
      break; 
    } 
} 

所以我認爲好 - 我只是在我的母版頁中做到這一點。不幸的是,將完全相同的代碼複製到母版頁中不起作用。所以我想 - 嗯,也許母版頁不使用這個事件。事實證明這是事實。

我真的不想把這個主題代碼放在每個內容頁面上。這似乎完全愚蠢。但我還無法找到其他方法。 MSDN僅描述了兩種將主題應用於頁面的方式 - 在web.config中或使用Page.Theme。

我將不得不創建一個頁面的子類,並讓我的所有頁面子類化該頁面,並覆蓋該子類中的PreInit?我想我一定會錯過一些東西,因爲我無法想象MS真的希望人們在每個內容頁面上以編程方式設置主題。

回答

3

一種選擇是創建自己的頁面基類並處理主題切換/設置。然後使用該類作爲所有頁面的基類。

public class PageBase : Page 
{ 
    protected void Page_PreInit(object sender, EventArgs e) 
    { 
    //.. 
    Page.Theme = "BlueTheme"; 
    //.. 
    } 
} 


public class MyPageOne : PageBase 
{ 
... 
} 
0

如果您的站點使用清潔的標記,你可以很容易地切換基於查詢字符串,瀏覽器類型樣式表,登錄信息等

使用CSS可以爲您節省了大量的時間在未來創造過新的主題/主頁/標記...等

+0

我的主題也被用來驅動其他邏輯,例如哪些按鈕出現在菜單欄和頁面上的一些其他的dyanmic控件 – 2009-01-20 08:46:49

相關問題