asp.net handles viewstate code that is too long in the original file

  • 2020-05-07 19:30:08
  • OfStack

 
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(); // Generate discrete id number  
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 
{ 
} 
} 
} 


You just need to inherit XVPage in the background of the page
public partial class Index_Content : XVPage

Related articles: