【问题标题】:How to set the Theme for an ASP.NET site in a 'gateway' page?如何在“网关”页面中为 ASP.NET 站点设置主题?
【发布时间】:2009-01-20 07:28:23
【问题描述】:

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

【问题讨论】:

    标签: asp.net master-pages


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我的主题也被用于驱动其他逻辑,例如哪些按钮出现在菜单栏中以及页面上的一些其他动态控件
      猜你喜欢
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多