手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net 处理原文件中过长的viewstate代码
asp.net 处理原文件中过长的viewstate代码
摘要:复制代码代码如下:publicclassXVPage:Page{staticprivateDirectoryInfo_Dir;private...

复制代码 代码如下:

public class XVPage : Page

{

static private DirectoryInfo _Dir;

private DirectoryInfo Dir

{

get

{

if (_Dir == null)

{

_Dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

if (!_Dir.Exists)

_Dir.Create();

_Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));

if (!_Dir.Exists)

_Dir.Create();

}

return _Dir;

}

}

protected override object LoadPageStateFromPersistenceMedium()

{

PageStatePersister ps = this.PageStatePersister;

ps.Load();

if (ps.ControlState != null)

ps.ControlState = AntiSerialization((string)ps.ControlState);

if (ps.ViewState != null)

ps.ViewState = AntiSerialization((string)ps.ViewState);

return new Pair(ps.ControlState, ps.ViewState);

}

protected override void SavePageStateToPersistenceMedium(object state)

{

PageStatePersister ps = this.PageStatePersister;

if (state is Pair)

{

Pair pair = (Pair)state;

ps.ControlState = pair.First;

ps.ViewState = pair.Second;

}

else

{

ps.ViewState = state;

}

if (ps.ControlState != null)

ps.ControlState = AntiSerialization(ps.ControlState);

if (ps.ViewState != null)

ps.ViewState = AntiSerialization(ps.ViewState);

ps.Save();

}

private object AntiSerialization(string stateID)

{

string stateStr = (string)Cache[stateID];

string file = Path.Combine(Dir.FullName, stateID);

if (stateStr == null)

stateStr = File.ReadAllText(file);

else

Cache.Remove(stateID);

return new ObjectStateFormatter().Deserialize(stateStr);

}

private string AntiSerialization(object obj)

{

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

string stateID = (DateTime.Now.Ticks + (long)value.GetHashCode()).ToString(); //产生离散的id号码

File.WriteAllText(Path.Combine(Dir.FullName, stateID), value);

Cache.Insert(stateID, value);

return stateID;

}

protected override void OnUnload(EventArgs e)

{

base.OnUnload(e);

DateTime dt = DateTime.Now.AddMinutes(-20);

foreach (FileInfo fl in Dir.GetFiles())

if (fl.LastAccessTime < dt)

try

{

fl.Delete();

}

catch

{

}

}

}

只需要在页面后台中继承XVPage 就可以了

public partial class Index_Content : XVPage

【asp.net 处理原文件中过长的viewstate代码】相关文章:

介绍asp.net 操作INI文件的读写

asp图片防盗链的代码

asp.net中包含文件的代码及使用方法

asp.net下实现支持文件分块多点异步上传的 Web Services

asp.net 生成曲线图实现代码

Asp.Net类库中发送电子邮件的代码

记录asp.net网站是什么原因导致停止运行的代码

asp.net(c#) ubb处理类

asp.net 的错误处理机制讲解

asp.net各种cookie代码和解析实例

精品推荐
分类导航