ASP.NET页面主题

ASP.NET页面有两个设置主题的不同属性,Themes属性和StyleSheetTheme属性。这两个属性,都是用App_Theme定义的主题,但是StyleSheetTheme属性在页面开始的比较早,Themes属性在页面的生命周期中用的比较晚。
所以,StyleSheetTheme属性能被页面重写,而Theme又能重写这些属性。Theme定义的页面外观就不能再被重写了。

应用主题有三个选项:1.在Page指令中的页面级,

<%@ Page Language="C#" .....  Theme="mySheme" %>

2.在站点级别Web.config文件中通过
添加

<system.web>
 <page theme="myTheme" styleSheetTheme="DarkGrey">
 ......
 <pages>

3.通过程序来设置主题。即动态切换主题
在运行时动态切换主题有几个好处,允许用户用喜欢的颜色和布局选择主题,也可以用不同的字体大小,来适应不同的人群。
在母版页中插入 DropDownList控件,增加两个Item,设定不同的主题。
****千万注意,一定要设置该控件的AutoPostBack:true,因为这个我找了两个小时的错误。
然后为DropDownList1_SelectedIndexChanged事件编写动态切换主题的程序

若改变主题选项,则应用新主题,同时储存主题信息。
用cookie储存主题
下面则是改变主题,储存主题信息到cookie,并重新刷新本页面的的代码,
位置是母版页的code behind:
  protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        HttpCookie preferredTheme = new HttpCookie("PreferredTheme");
        preferredTheme.Expires = DateTime.Now.AddMonths(1);
        preferredTheme.Value = DropDownList1.SelectedValue;
        Response.Cookies.Add(preferredTheme);
        Response.Redirect(Request.Url.ToString());
    }
网站打开时,需要先读出储存的上次网站退出时存储的页面主题,若不一致,则修改DropDownList选择为储存的主题
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            string SelectedTheme = Page.Theme; //保存页面Theme
            HttpCookie preferredTheme=Request.Cookies.Get("PreferredTheme");
            if (preferredTheme!=null)
            {
                SelectedTheme=preferredTheme.Value;
            }
            if (!string.IsNullOrEmpty(SelectedTheme))
            {
                ListItem item = DropDownList1.Items.FindByValue(SelectedTheme);
                if (item != null)
                {
                    item.Selected = true;
                }
            }
            
        }
    }

4.BasePage类中:

 private void Page_PreInit(object sender, EventArgs e)
    {
        HttpCookie preferredTheme = Request.Cookies.Get("PreferredTheme");
        if (preferredTheme != null)
        {
            string folder = Server.MapPath("~/App_Themes/" + preferredTheme.Value);
            if (System.IO.Directory.Exists(folder))
            {
                Page.Theme = preferredTheme.Value;
            }
        }
    }

    public BasePage()
    {
        this.PreRender += Page_PreRender;
        this.PreInit += Page_PreInit;
    }

5.在浏览器中打开网页,这样就可以动态切换主题了。!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值