返回51aspx首页
当前位置:首页>>新知实践>>母板页(MasterPage)中设置主题(附程序详解)
加入比较
<前一源码 | 后一源码>
[点击下载该源码]

母板页(MasterPage)中设置主题(附程序详解)

 
开发环境:
VS2008
| 开发语言:C#
当前.Net版本为3.5(VS2008),点击可以下载Framework3.5安装环境
类别: 新知实践| 大小:44Kb  | W:31,M:100,T:7909
开源度: |  分享奖励:[0]积分
适合读者 适读人群:入门者 - 进阶 - 高手  | 讨论:[2]
作者:徐明祥    配套资源下载 附件:[0]   相关网址  相关网址:[查看]
上传时间:2008-11-21 8:32:17 | 上传者:xumingxiang
  • 论坛积分:167
  • 当前身份:程序员[非实名]
  • 已发贴数:58
  • 已发源码:4 个,被推荐[1]个
推荐代码截图
www.51aspx.com
可以点击在新窗口打开  该[源码目录树]加载中,请稍候...
该源代码简介 源码简介
母板页(MasterPage)中设置主题(附程序详解)
 ASP.Net 提供了主题皮肤这个东西,其实也就是换肤啦。可是网上有很多人说这个东西鸡肋,说这个东西在 .aspx页面中使用还行,却不能在母板页(MasterPage)中使用。是的,确实不能直接在MasterPage通过一个DDL的选择来切换整个网站的主题,因为 Page.Theme 这个属性都是在PreInit(){}中设置,否则报错,而MasterPage是不执行PreInit() 。
 我做的这个实例希望能够帮大家解决这个问题。为是大家能更好的理解我这个源码,下面简单介绍一下。
 首先说下思路:我们的目的是要在MasterPage放个DropDownList,通过切换DropDownList ,(我这里没有用DropDownList,而是用Css模拟一个“DropDownList” 其中的每个项里放了一个LinkButton,每个LinkButtond的PostBackUrl的值都形如:"~/ThemeTool.aspx?Theme=主题名称" )来改变整个网站的主题 ,而不是只改变当前页面,就跟Discuz ! 的那个一样,所以这个改变是全局的,但是是针对于当前线程的,即A用户改变了主题,只对A有效,对B用户没有影响,所以我们不会动到配置文件,那我们很快想到的就是session ,对的,我们要把主题的名称放到session里 ,如Session["Theme"]="Blue" ;这样每个页面 只要在Page_PreInit()里去获取该Session的值,并赋给该页面的Page.Theme属性,就OK了。
 当我们改变了"DropDowList"的选项,在我这里实际上是点击了不同的Linkbutton,也就是要改变主题的名称了,也就是要改变Session["Theme"]的值了,这个“改变”的在哪里执行呢?这是很关键的,是在LinkButton_Click()里吗?不是,因为重新获取Page.Theme必须在Page_PreInit()里,而LinkButton_Click()是发生得很晚的,还在Load之后,更别说PreInit()了,所以我在这里是将它跳转到ThemeTool.aspx里处理的,处理完了再重定向到原页面,这样就达到了在原页面PreInit()之前改变了Session["Theme"]的值,请放心这一过程不会使ThemeTool加载到浏览器,我们看不到的,我们只是借用了它的Page_PreInit(),用完立马就走了,哈哈!!
 好了,思路就这样,下面再介绍下三个文件:
 1、MasterPage.master ,在这个文件里值得说的就是我那用Css模拟的"DropDownList" , 该"DropDownList" 的每个项里都有个LinkButton ,每个LinkButtond的PostBackUrl的值都形如:"~/ThemeTool.aspx?Theme=主题名称"  ,这样每次改变"DropDownList" 的选项就会向ThemeTool.aspx传去了新的Theme值,再由ThemeTool.aspx处理将这个新的Theme值存入Session。
 2、在App_Code文件夹里有个ThemeSkin.cs文件,里面写了两个静态方法:GetTheme(Page P) 和GetTheme(Page P),其中GetTheme(Page P)用来获取主题,这个方法在网站的每一个需要有主题的页面(我这里就是Default.aspx 和Default2.aspx l了)的Page_PreInit()里被调用,参数P 是指调用该方法的页面,是个Page类型的对象;ChangeTheme()用来切换主题,在ThemeTool.aspx.cs的Page_PreInit()里被调用。
 3、根目录里的ThemeTool.aspx这个页面也是很重要的,主题的切换就是在它的Page_PreInit里搞定的,谁叫MasterPage不执行PreInit呢 ^_^  。里面的代码很简单,不信你去看。
增强版源码  增强版
暂时,没有增强版,我要添加赚取金币!
如果你也曾对该源码进行过改进,请[ 上传增强版],得金币
  [ 高级模式 ]
Tips:实名用户 优先高质回复
该源码共有[2]条问答,本页显示最新[5]条,查看更多请进 >>
点击打开所有标签列表
| 类别导航
- 企业网站 [117]
- 新闻文章 [114]
- 博客空间 [114]
- 尚未分类 [100]
- 电子商务 [129]
- 新知实践 [148]
- 商务办公 [137]
- 实验作品 [148]
51Aspx.com 版权所有 CopyRight © 2006-2010. 京ICP备06046876号 本站法律顾问:ITlaw-庄毅雄律师
返回顶部
客户服务:点击这里进行客户咨询 业务合作:点击这里洽谈业务合作 合作热线:010-68880146