天天看點

【轉】去除.Net頁面中的ViewState亂碼

C# code

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

//添加引用

using System.IO;

using System.Threading;

namespace CCL

{

    /// <summary>

    /// BasePage 的摘要說明

    /// </summary>

    public class BasePage : System.Web.UI.Page

    {

        #region 解決ViewState過于龐大的問題

        //由于這裡添加了目錄,是以要建立App_Data/ViewState目錄.

        protected override object LoadPageStateFromPersistenceMedium()

        {

            string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;

            string stateStr = (string)Cache[viewStateID];

            if (stateStr == null)

            {

                string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);

                stateStr = File.ReadAllText(fn);

            }

            return new ObjectStateFormatter().Deserialize(stateStr);

        }

        protected override void SavePageStateToPersistenceMedium(object state)

            string value = new ObjectStateFormatter().Serialize(state);

            string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //産生離散的id号碼

            string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);

            //ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));

            File.WriteAllText(fn, value);

            Cache.Insert(viewStateID, value);

            base.SavePageStateToPersistenceMedium(viewStateID);

        #endregion

    }

}