2009-02-06 69 views
1

我有一個網絡應用程序,直到現在已被剝皮(只是基本的顏色和標誌,沒有什麼複雜的)到一家公司,但現在,因爲與另一家公司合併,該網站需要被稱爲兩家獨立公司(兩家公司的運營情況完全相同,他們共享相同的數據)。最簡單的方法是複製Web應用程序並託管它的兩個實例,但這將是一個維護麻煩,我真的只想設置一個DNS別名到同一個站點。ASP.NET基於URL設置主題

基本上我想根據網站的URL更改主題。例如 alpha.company.com - >主題A beta.comany.com - >主題B.

你會如何推薦解決這個問題?

回答

4

在您的網頁(或基頁),獲取有關PreInit處理器(僅頁面有該事件,而不是母版),並做類似如下:

protected void Page_PreInit(..) 
{ 
    this.Theme = GetThemeByUrl(Request.Url); 
} 

private string GetThemeByUrl(Uri url) 
{ 
    string host = url.Host; //gets 'subdomain.company.com' 
    //determine & return theme name from host 
} 
-3

在MasterPage.PreInit事件中使用:

Page.Theme = (Request.RawUrl.Contains("...") ? "yellow": "blue"); 

或沿這些行的東西...

希望這有助於 弗羅林。

+0

母版不具有PreInit方法;另外,RawUrl不包含請求的主機頭部分,只有路徑(例如「/application/hello.aspx」) – 2009-02-06 01:09:56

+0

PreInit是一個事件,如果MasterPage從System.Web.UI.Page派生,它將包含那個事件。 Request.RawUrl確實不包含主機部分,但很容易從Request.Url.Host或Request.Url.GetLeftPart(...)獲取。 – 2009-02-06 01:22:11

0

最好的辦法是重寫Theme屬性在頁面類:

入住這ASP.NET Themes and Right-to-Left Languages

public override string Theme 
{ 
    get 
    { 
     if (!string.IsNullOrEmpty(base.Theme)) 
     { 
      return (CultureInfo.CurrentUICulture.TextInfo.IsRightToLeft ? string.Format("{0}.rtl", base.Theme) : base.Theme); 
     } 
     return base.Theme; 
    } 
    set 
    { 
     base.Theme = value; 
    } 
}