Beispiel #1
0
        /*
         * //将视图状态保存到文件中
         * //此方法应在Global.asax\Application_Start中调用
         * private void CreateViewStateDirectory()
         * {
         #region 建立文件夹保存视图状态的文件 并删除过期文件
         *  System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(this.Server.MapPath("~/App_Data/ViewState/"));
         *  if (!dir.Exists) dir.Create();
         *  else
         *  {
         *      DateTime nt = DateTime.Now.AddHours(-1);
         *      foreach (System.IO.FileInfo f in dir.GetFiles())
         *      {
         *          if (f.CreationTime < nt) f.Delete();
         *      }
         *  }
         #endregion
         * }
         * 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);
         * }
         */
        //压缩ViewState并保存到session中
        protected override void SavePageStateToPersistenceMedium(object pageViewState)
        {
            MemoryStream ms = new MemoryStream();

            System.Web.UI.LosFormatter m_formatter = new System.Web.UI.LosFormatter();
            m_formatter.Serialize(ms, pageViewState);
            ms.Position = 0;
            StreamReader sr = new StreamReader(ms);
            string       viewStateString = sr.ReadToEnd();

            byte[] ViewStateBytes = Convert.FromBase64String(viewStateString);
            ViewStateBytes         = ViewStateCompression.Compress(ViewStateBytes);
            Session["__ViewState"] = Convert.ToBase64String(ViewStateBytes);
            ms.Close();
            return;
        }
Beispiel #2
0
        // 序列化ViewState
        protected override object LoadPageStateFromPersistenceMedium()
        {
            object viewStateBag;
            string m_viewState = (string)Session["__ViewState"];

            byte[] ViewStateBytes = Convert.FromBase64String(m_viewState);
            ViewStateBytes = ViewStateCompression.Decompress(ViewStateBytes);
            System.Web.UI.LosFormatter m_formatter = new System.Web.UI.LosFormatter();
            try
            {
                viewStateBag = m_formatter.Deserialize(Convert.ToBase64String(ViewStateBytes));
            }
            catch (Exception ex)
            {
                //Log.Insert( "页面Viewtate是空." );
                viewStateBag = string.Empty;
            }
            return(viewStateBag);
        }