当你打开aspx的页面,你发现了类似<input type="hidden" name="__VIEWSTATE" value="dDwtMTAzNzM3NDQ0NDt0PDtsPGk8MD47PjtsPHQ8O2w8aTwxPjs+O2w8dDw7A==" />这样的代码了吗?你发现页面有时代访问会非常慢了吗?这是因为viewsateViewState 在客户端的 HTML 里占据大量的空间,并随着页面的 PostBack 反复传递于网络中,难度我们不能把它存放在别的地方吗?当时可以。这样做会显著提高页面的效率。
下面本来打算存放在数据库里,可懒得建库就随手放在xml里面了
在看看,放在文件里的效果(跟上面基本上一样的)
当然我们还可以把它放在session,cache中:
这里就不重覆了,引用下前辈写的吧(http://www.cnblogs.com/RChen/archive/2006/02/26/338327.html)
在页面中:
下面本来打算存放在数据库里,可懒得建库就随手放在xml里面了
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Security.Permissions;
/// <summary>
/// xmlPageStatePersister 的摘要说明
/// </summary>
public class xmlPageStatePersister : PageStatePersister
{
protected string xPath = @"d:.xml";
public xmlPageStatePersister(Page page):base (page)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public override void Load()
{
IStateFormatter sf = this.StateFormatter;
Pair statePair = (Pair)sf.Deserialize(this.GetXmlDoc());
ViewState = statePair.First;
ControlState = statePair.Second;
//throw new Exception("The method or operation is not implemented.");
}
private string GetXmlDoc()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xPath);
string str = "";
XmlNodeList xnList = xmlDoc.SelectSingleNode("root").ChildNodes;
foreach (XmlNode xn in xnList)
{
XmlElement xe = (XmlElement)xn;
if (xe.Name == "ViewState")
{
str += xe.InnerText;
}
if (xe.Name == "ControlState")
{
str += xe.InnerText;
}
}
return str;
}
public override void Save()
{
if (ViewState != null)
{
this.SetXmlDoc();
}
else
{
throw new Exception("The method or operation is not implemented.");
}
}
private void SetXmlDoc()
{
XmlDocument xmlDoc = new XmlDocument();
XmlElement root = xmlDoc.CreateElement("root");
IStateFormatter sf = this.StateFormatter;
XmlElement x1 = xmlDoc.CreateElement("ViewState");
x1.InnerText = sf.Serialize(ViewState);
XmlElement x2 = xmlDoc.CreateElement("ControlState");
x2.InnerText = sf.Serialize(ControlState);
root.AppendChild(x1);
root.AppendChild(x2);
xmlDoc.AppendChild(root);
xmlDoc.Save(xPath);
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Security.Permissions;
/// <summary>
/// xmlPageStatePersister 的摘要说明
/// </summary>
public class xmlPageStatePersister : PageStatePersister
{
protected string xPath = @"d:.xml";
public xmlPageStatePersister(Page page):base (page)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public override void Load()
{
IStateFormatter sf = this.StateFormatter;
Pair statePair = (Pair)sf.Deserialize(this.GetXmlDoc());
ViewState = statePair.First;
ControlState = statePair.Second;
//throw new Exception("The method or operation is not implemented.");
}
private string GetXmlDoc()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xPath);
string str = "";
XmlNodeList xnList = xmlDoc.SelectSingleNode("root").ChildNodes;
foreach (XmlNode xn in xnList)
{
XmlElement xe = (XmlElement)xn;
if (xe.Name == "ViewState")
{
str += xe.InnerText;
}
if (xe.Name == "ControlState")
{
str += xe.InnerText;
}
}
return str;
}
public override void Save()
{
if (ViewState != null)
{
this.SetXmlDoc();
}
else
{
throw new Exception("The method or operation is not implemented.");
}
}
private void SetXmlDoc()
{
XmlDocument xmlDoc = new XmlDocument();
XmlElement root = xmlDoc.CreateElement("root");
IStateFormatter sf = this.StateFormatter;
XmlElement x1 = xmlDoc.CreateElement("ViewState");
x1.InnerText = sf.Serialize(ViewState);
XmlElement x2 = xmlDoc.CreateElement("ControlState");
x2.InnerText = sf.Serialize(ControlState);
root.AppendChild(x1);
root.AppendChild(x2);
xmlDoc.AppendChild(root);
xmlDoc.Save(xPath);
}
}
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Security.Permissions;
/// <summary>
/// DataBasePageStatePersister 的摘要说明
/// </summary>
public class DataBasePageStatePersister : PageStatePersister
{
protected string xPath = @"d:.txt";
public DataBasePageStatePersister(Page page):base (page)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//
//Load ViewState and ControlState
//
public override void Load()
{
Stream stream = GetSecureStream();
StreamReader sr = new StreamReader(stream);
IStateFormatter isf = this.StateFormatter;
string fileControls = sr.ReadToEnd();
Pair statePair = (Pair)isf.Deserialize(fileControls);
ViewState = statePair.First;
ControlState = statePair.Second;
sr.Close();
stream.Close();
}
public override void Save()
{
if (Page.Session != null)
{
Stream stateStream = GetSecureStream();
StreamWriter sw = new StreamWriter(stateStream);
IStateFormatter isf = this.StateFormatter;
Pair statePair = new Pair(ViewState, ControlState);
string str = isf.Serialize(statePair);
sw.Write(str);
sw.Close();
stateStream.Close();
}
else
{
throw new Exception("The method or operation is not implemented.");
}
}
private Stream GetSecureStream()
{
FileStream fs = new FileStream(xPath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
return fs;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Security.Permissions;
/// <summary>
/// DataBasePageStatePersister 的摘要说明
/// </summary>
public class DataBasePageStatePersister : PageStatePersister
{
protected string xPath = @"d:.txt";
public DataBasePageStatePersister(Page page):base (page)
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//
//Load ViewState and ControlState
//
public override void Load()
{
Stream stream = GetSecureStream();
StreamReader sr = new StreamReader(stream);
IStateFormatter isf = this.StateFormatter;
string fileControls = sr.ReadToEnd();
Pair statePair = (Pair)isf.Deserialize(fileControls);
ViewState = statePair.First;
ControlState = statePair.Second;
sr.Close();
stream.Close();
}
public override void Save()
{
if (Page.Session != null)
{
Stream stateStream = GetSecureStream();
StreamWriter sw = new StreamWriter(stateStream);
IStateFormatter isf = this.StateFormatter;
Pair statePair = new Pair(ViewState, ControlState);
string str = isf.Serialize(statePair);
sw.Write(str);
sw.Close();
stateStream.Close();
}
else
{
throw new Exception("The method or operation is not implemented.");
}
}
private Stream GetSecureStream()
{
FileStream fs = new FileStream(xPath,FileMode.OpenOrCreate,FileAccess.ReadWrite);
return fs;
}
}
这里就不重覆了,引用下前辈写的吧(http://www.cnblogs.com/RChen/archive/2006/02/26/338327.html)
在页面中:
protected
override
PageStatePersister PageStatePersister
{
get
{
//return new SessionPageStatePersister(this); //将ViewState信息保存在Session中
//return new DataBasePageStatePersister(this); //将ViewState信息保存在txt文件中
return new xmlPageStatePersister(this); //将ViewState信息保存在xml文件中
}
}
{
get
{
//return new SessionPageStatePersister(this); //将ViewState信息保存在Session中
//return new DataBasePageStatePersister(this); //将ViewState信息保存在txt文件中
return new xmlPageStatePersister(this); //将ViewState信息保存在xml文件中
}
}