代码之家  ›  专栏  ›  技术社区  ›  Simon_Weaver

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

  •  0
  • Simon_Weaver  · 技术社区  · 16 年前

    我希望能够在网关页面中设置一个ASP.NET主题,它将根据合作伙伴id或类似的东西来确定主题。我想我只需要在会话中粘贴主题名称,然后在需要时从那里获取它。

    我找不到合适的地方把代码放在一个地方。

    我似乎看不到一个全球性的地方,你可以设置主题。你必须为每一页设置它。

    如中所述 MSDN 可以在页面的PreInit函数中分配主题属性。

    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的子类,并让所有的pages子类都成为该页的子类,然后重写该子类中的PreInit吗?我想我一定漏掉了一些东西,因为我无法想象微软真的希望人们在每一个内容页面上都用程序设置主题。

    2 回复  |  直到 16 年前
        1
  •  3
  •   M4N    16 年前

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

    public class PageBase : Page
    {
      protected void Page_PreInit(object sender, EventArgs e)
      {
        //..
        Page.Theme = "BlueTheme";
        //..
      }
    }
    
    
    public class MyPageOne : PageBase
    {
     ...
    }
    
        2
  •  0
  •   Birk    16 年前

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