服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

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

2019-07-08 12:28ASP.NET之家 ASP.NET教程

asp.net网页原文件中总出现一段很长的viewstate代码看着就头痛 所以在网上找了篇文章解决了这个问题,虽然VIEWSTATE没有完全隐藏,但大大的改善了网页源文件中VIEWSTATE的长度。

代码如下:

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

延伸 · 阅读

精彩推荐