ViewState壓縮技術

來源:互聯網
上載者:User

標籤: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;                }            }        }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.