0

我希望能够在网关页面中设置 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 真的希望人们在每个内容页面上以编程方式设置主题。

4

2 回答 2

3

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

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


public class MyPageOne : PageBase
{
 ...
}
于 2009-01-20T07:38:04.467 回答
0

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

使用 CSS 可以为您在未来创建新主题/母版页/标记...等方面节省大量时间。

于 2009-01-20T08:37:49.307 回答