网上找来的代码,备用。具体如下:
protected override object LoadPageStateFromPersistenceMedium()
{
var viewStateID = (string)(((Pair)base.LoadPageStateFromPersistenceMedium()).Second);
var stateStr = (string)Cache[viewStateID];
if (stateStr == null)
{
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
if (File.Exists(fn)) //防止删除报错
{
stateStr = File.ReadAllText(fn);
}
}
return new ObjectStateFormatter().Deserialize(stateStr);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
var value = new ObjectStateFormatter().Serialize(state); //获取页面状态
var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value)); //插入线程池中,写入硬盘
Cache.Insert(viewStateID, value); //用sesson也可以
base.SavePageStateToPersistenceMedium(viewStateID);
}
{
var viewStateID = (string)(((Pair)base.LoadPageStateFromPersistenceMedium()).Second);
var stateStr = (string)Cache[viewStateID];
if (stateStr == null)
{
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
if (File.Exists(fn)) //防止删除报错
{
stateStr = File.ReadAllText(fn);
}
}
return new ObjectStateFormatter().Deserialize(stateStr);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
var value = new ObjectStateFormatter().Serialize(state); //获取页面状态
var viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码
var fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
ThreadPool.QueueUserWorkItem(obj => File.WriteAllText(fn, value)); //插入线程池中,写入硬盘
Cache.Insert(viewStateID, value); //用sesson也可以
base.SavePageStateToPersistenceMedium(viewStateID);
}