服务器之家

服务器之家 > 正文

asp.net 处理原文件中过长的viewstate代码

时间:2019-07-08 12:28     来源/作者:ASP.NET之家
代码如下:

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
标签:

相关文章

热门资讯

抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字
抖音撒撒累累是什么歌 撒撒累累张艺兴歌曲名字 2019-06-05
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍
叠猫猫队长可以退出吗 叠猫猫队长怎么换队伍 2019-06-05
淘宝合合卡可以送好友吗 淘宝合合卡快速获得方式
淘宝合合卡可以送好友吗 淘宝合合卡快速获得方式 2019-06-13
叠猫猫可以邀请多少人 叠猫猫大挑战一个队最多多少人
叠猫猫可以邀请多少人 叠猫猫大挑战一个队最多多少人 2019-06-05
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部