这个有很多种方法我在这里写几个吧
方式一:
在页面的PreInit事件中直接设置。该方法可实现不同页面加载不同主题,如果要实现网站整体换肤,只需要创建一个从System.Web.UI.Page类派生的子类,在该类的PreInit事件中加载特定主题,最后所有页面继承自此类即可。
[mw_shl_code=csharp,true]protected override void OnPreInit(EventArgs e)
{
//这里是要换的主题的名称
this.Theme="MyTheme";
base.OnPreInit(e);
}[/mw_shl_code
其中“MyTheme”为主题名,可从外部文件或数据库加载,以实现主题设置的持久化。
==================================================================================
方式二:
在global.asax中捕获HttpApplication的PreRequestHanderExecute事件
在事件中为Page的PreInit事件添加处理程序
global.asax中的代码如下
[C#] 纯文本查看 复制代码 void Application_PreRequestHandlerExecute(object src,EventArgs e)
{
Page page=this.Context.Handler as Page;
if(page!=null)
{
page.PreInit+=new EventHandler(page_PreInit);
}
}
void Page_PreInit(object sender,EventArgs e)
{
Page page=this.Context.Handler as Page;
if(page!=null)
{
page.Theme="MyTheme";
}
}
================================================
方法三:
运行时修改配置文件
[C#] 纯文本查看 复制代码 首先导入命名空间:using System.Web.Configuration;
接着用如下代码修改web.config文件的pages配置节:
string configPath = "~"; //表示根目录
Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);
PagesSection pages = (PagesSection)config.GetSection("system.web/pages");
pages.Theme = DDLTheme.SelectedValue; //修改主题,我根据DropdownList回发修改主题。
config.Save();
不过有一个问题:由于修改了web.config文件,session会丢失,如果用session判断用户是否在线,就会导致修改主题后必须重新登陆。
解决办法:先把session的内容放到cookie里,修改后再读取到session里。办法比较笨,如果用户浏览器不支持或者禁用了cookie,这个办法就无效了,那就只好重新登录了。不知有没更好的解决办法。
|