码迷,mamicode.com
首页 > 其他好文 > 详细

ViewState压缩技术

时间:2014-07-28 15:23:53      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   os   文件   io   

ViewState 的使用,大家可以说是又爱又恨,它其中一个特性就是保存页面的状态,对于只是展示的页面,我们可以直接在页面文件中使用 EnableViewState="false" 来将其屏蔽,但是很多时候,我们不得不使用它,可是它产生的页面冗长的html代码有让我们很头疼,下面介绍一种ViewState压缩机制。主要是通过重写 PageStatePersister 来实现。

 

1、开发一个ViewStateFactory,根据不同的配置,修改存储方式。

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.Caching;
namespace Common
{
    public enum ViewstateMode
    {
        Cache,
        Session,
        Page,
        File,
        Database
    }

    public class ViewStateFactory
    {
        public ViewStateFactory()
        {
        }

        public static PageStatePersister CreateViewState(ViewstateMode mode, Page page)
        {
            switch (mode)
            {
                case ViewstateMode.Cache:
                    return new CacheStatePersister(page);
                case ViewstateMode.Session:
                    return new SessionPageStatePersister(page);
                case ViewstateMode.Page:
                case ViewstateMode.File:
                case ViewstateMode.Database:
                    return new HiddenFieldPageStatePersister(page);
                default:
                    return new HiddenFieldPageStatePersister(page);
            }
        }
    }

    //实现一个自定义的方式,存储到服务器的Cache里
    public class CacheStatePersister : PageStatePersister
    {
        private Cache mCache = HttpRuntime.Cache;
        public CacheStatePersister(Page page) : base(page) { }

        public override void Load()
        {
            string _vskey = Page.Request.Form["_VIEWSTATE_KEY"];
            if (_vskey == null)
            {
                base.ViewState = null;
            }
            else
            {
                base.ViewState = mCache[_vskey];
            }
        }



        public override void Save()
        {
            string _vskey;
            _vskey = "VIEWSTATE_" + HttpContext.Current.Session.SessionID + "_" + Page.Request.RawUrl + "_" + System.DateTime.Now.Ticks.ToString();

            mCache.Add(_vskey, base.ViewState, null,

                System.DateTime.Now.AddMinutes(HttpContext.Current.Session.Timeout), Cache.NoSlidingExpiration,

                            CacheItemPriority.Default, null);
            this.Page.RegisterHiddenField("_VIEWSTATE_KEY", _vskey);

        }

    }

}

 

  
2、在Web.config的AppSetting里加上
<add key="ViewStateMode" value="Cache"/>  

3、覆盖页面的PageStatePersister,这里你可以开发一个BasePage,在基类里覆盖,所有的页面集成这个页面

        //重写PageStatePersister,用于压缩ViewState
        protected override PageStatePersister PageStatePersister
        {
            get
            {
                ViewstateMode viewstateMode = ViewstateMode.Page;
                try
                {
                    switch (System.Configuration.ConfigurationManager.AppSettings["ViewStateMode"].ToString().ToLower())
                    {
                        case "cache":
                            viewstateMode = ViewstateMode.Cache;
                            break;
                        case "session":
                            viewstateMode = ViewstateMode.Session;
                            break;
                        default:
                            viewstateMode = ViewstateMode.Page;
                            break;
                    }
                    return ViewStateFactory.CreateViewState(viewstateMode, this.Page);
                }
                catch (Exception ex)
                {
                    return base.PageStatePersister;
                }
            }
        }

 

ViewState压缩技术,布布扣,bubuko.com

ViewState压缩技术

标签:style   blog   http   color   使用   os   文件   io   

原文地址:http://www.cnblogs.com/future/p/3872974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!