Asp.net 如何在';网关&x27;页

Asp.net 如何在';网关&x27;页,asp.net,master-pages,Asp.net,Master Pages,我希望能够在网关页面中设置ASP.NET主题,它将根据合作伙伴id或类似的内容确定主题。我想我只需要在会话中粘贴主题名称,然后在需要时从那里获取它 我很难找到正确的地方将代码放在一个地方 我似乎看不到一个全球性的地方,你可以设置主题。您必须为每个页面设置它 如中所述,您可以在PreInit函数中为页面分配Theme属性 Protected void Page_PreInit(object sender, EventArgs e) { switch (Request.QueryString

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

我很难找到正确的地方将代码放在一个地方

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

如中所述,您可以在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;
    }
}
所以我想可以-我会在我的主页上这样做。不幸的是,将完全相同的代码复制到母版页是行不通的。所以我想-嗯,也许母版页不使用这个事件。事实证明这是真的

我真的不想把这个主题代码放在每个内容页上。这似乎完全是愚蠢的。但我还找不到另一条路。仅描述将主题应用于页面的两种方法—在web.config中或使用page.theme


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

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

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


public class MyPageOne : PageBase
{
 ...
}

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

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


public class MyPageOne : PageBase
{
 ...
}

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


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

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


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

my theme还被用于驱动其他逻辑,例如哪些按钮出现在菜单栏中以及页面上的其他动态控件。my theme还被用于驱动其他逻辑,例如哪些按钮出现在菜单栏中以及页面上的其他动态控件