如何在“网关”页面中为ASP.NET站点设置主题?

时间:2009-01-20 07:28:23

标签: asp.net master-pages

我希望能够在网关页面中设置ASP.NET主题,这将根据合作伙伴ID或类似内容确定主题。我想我只是在会话中坚持主题名称,如果需要的话,从那里得到它。

我无法找到将此代码放在一个位置的正确位置。

我似乎无法看到一个可以设置主题的全局位置。你必须为每个页面设置它。

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。

我是否必须创建Page的子类并让我的所有页面都是该页面的子类,并覆盖该子类中的PreInit?我想我必须遗漏一些东西,因为我无法想象MS真的希望人们在每个内容页面上以编程方式设置主题。

2 个答案:

答案 0 :(得分:3)

一种选择是创建自己的Page基类并在那里处理主题切换/设置。然后使用该类作为所有页面的基类。

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


public class MyPageOne : PageBase
{
 ...
}

答案 1 :(得分:0)

如果您的网站使用干净标记,您可以根据查询字符串,浏览器类型,登录信息等轻松切换样式表。

使用CSS可以为您节省很多时间,而不是创建新的主题/主页/标记......等。