日期:2014-05-18 浏览次数:20504 次
private bool viewStateCompress = false; protected bool ViewStateCompress { set { viewStateCompress = value; } get { return viewStateCompress;} } protected override void SavePageStateToPersistenceMedium(object state) { if (!viewStateCompress) { base.SavePageStateToPersistenceMedium(state); } else { Pair pair; byte[] data; byte[] compressedData; string compressedStr; object viewState = null, controlState = null; LosFormatter formatter = new LosFormatter(); commonUtil.CompressHelper CH = commonUtil.CompressHelper.getInstance(); PageStatePersister persister = this.PageStatePersister; if (state is Pair) { pair = (Pair)state; viewState = pair.First; controlState = pair.Second; } else { base.SavePageStateToPersistenceMedium(state); return; } StringWriter wViewState = new StringWriter(); StringWriter wControlState = new StringWriter(); formatter.Serialize(wViewState, viewState); string viewStateStr = wViewState.ToString(); data = Convert.FromBase64String(viewStateStr); compressedData = CH.Compress(data); compressedStr = Convert.ToBase64String(compressedData); persister.ViewState = compressedStr; formatter.Serialize(wControlState, controlState); string controlStateStr = wControlState.ToString(); data = Convert.FromBase64String(controlStateStr); compressedData = CH.Compress(data); compressedStr = Convert.ToBase64String(compressedData); persister.ControlState = compressedStr; persister.Save(); } } protected override object LoadPageStateFromPersistenceMedium() { if (!viewStateCompress) { return base.LoadPageStateFromPersistenceMedium(); } else { byte[] data; byte[] uncompressedData; string decompressedStr; object viewState, controlState; LosFormatter formatter = new LosFormatter(); commonUtil.CompressHelper CH = commonUtil.CompressHelper.getInstance(); PageStatePersister persister = this.PageStatePersister; persister.Load(); string viewStateStr = persister.ViewState.ToString(); string controlStateStr = persister.ControlState.ToString(); try { data = Convert.FromBase64String(viewStateStr); uncompressedData = CH.Decompress(data); decompressedStr = Convert.ToBase64String(uncompressedData); viewState = formatter.Deserialize(decompressedStr); data = Convert.FromBase64String(controlStateStr); uncompressedData = CH.Decompress(data); decompressedStr = Convert.ToBase64String(uncompressedData); controlState = formatter.Deserialize(decompressedStr); } catch(Exception exp) { viewState = null; controlState = n