母板页(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呢 ^_^ 。里面的代码很简单,不信你去看。
作者:xumingxiang,发布者:xumingxiang
源码下载及讨论地址:http://www.51aspx.com/CV/ThemeInMasterPage
╭═══════════════╮
║ Asp.net源码下载专业站 ║
╭══════┤ http://www.51aspx.com ├══════╮
║ ║ 论坛:http://bbs.51aspx.com ║ ║
║ ╰═══════════════╯ ║
║ ║
║51aspx声明: ║
║ 1) 本站不保证所提供软件或程序的完整性和安全性。 ║
║ 2) 转载本站提供的资源请勿删除本说明文件。 ║
║ 3) 本站源码为网上搜集或网友提供,如果涉及或侵害到您的版║
║ 请立即写信通知我们。 ║
║ 4) 本站提供代码只可供研究使用,请在下载24小时内删除, ║
║ 切勿用于商业用途,由此引起一切后果与本站无关。 ║
║ 5) 源码后续升级或修补,我们会在该源码评论中发布! ║
║ ║
║ 本站专注于Asp.net源码下载 ║
║ 联系方式 : support@51aspx.com ║
║ ╭───────────────────────╮ ║
╰══┤ Asp.net源码网 http://www.51aspx.com ├══╯
╰───────────────────────╯
友情提示:
一般数据库文件默认在DB_51aspx文件夹下
如果使用VS2005打开本站项目文件,建议打开前务必安装VS2005Sp1
关于源码使用常见问题及解决方案,请参阅:http://bbs.51aspx.com/showforum-9.html
没有合适的资源?快使用搜索试试~ 我知道了~
asp.net母板页(MasterPage)中设置主题(附程序详解)
共26个文件
jpg:5个
cs:5个
aspx:3个
5星 · 超过95%的资源 需积分: 9 47 下载量 192 浏览量
2008-11-21
09:41:12
上传
评论
收藏 44KB RAR 举报
温馨提示
ASP.Net 提供了主题皮肤这个东西,其实也就是换肤啦。可是网上有很多人说这个东西鸡肋,说这个东西在 .aspx页面中使用还行,却不能在母板页(MasterPage)中使用。是的,确实不能直接在MasterPage通过一个DDL的选择来切换整个网站的主题,因为 Page.Theme 这个属性都是在PreInit(){}中设置,否则报错,而MasterPage是不执行PreInit()
资源推荐
资源详情
资源评论
收起资源包目录
(MasterPage)中设置主题(附程序详解).rar (26个子文件)
程序详解.htm 5KB
App_Code
ThemeSkin.cs 2KB
App_Themes
Default
image
from.gif 5KB
nopic.jpg 17KB
SkinFile.skin 699B
StyleSheet.css 207B
BlueTheme
image
head_874e107.jpg 5KB
bg.jpg 857B
Control.skin 1KB
StyleSheet.css 197B
PorpleTheme
image
bg.jpg 1KB
42.jpg 4KB
Control.skin 881B
StyleSheet.css 203B
ThemeTool.aspx.cs 160B
from.gif 5KB
web.config 8KB
MasterPage.master.cs 160B
Default2.aspx 835B
Default.aspx 616B
Default.aspx.cs 258B
Default2.aspx.cs 241B
MasterPage.master 3KB
ThemeTool.aspx 232B
最新Asp.Net源码下载.url 125B
51aspx源码必读.txt 4KB
共 26 条
- 1
资源评论
- 喵肉肉~2014-11-08资源不错,值得下载学习!
- a10639103252014-05-21学习中。。。
- MiracleCN2013-02-19资料很好,正好是我在找的,谢谢分享!
- cxydx2015-04-15很简单~~比较适合初学者~
hjq1979
- 粉丝: 2
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功