2009-02-06 68 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; 
    } 
}