/* * //将视图状态保存到文件中 * //此方法应在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; }
// 序列化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); }