我希望能够在网关页面中设置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真的希望人们在每个内容页面上以编程方式设置主题。
答案 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可以为您节省很多时间,而不是创建新的主题/主页/标记......等。