Jeder weiß, dass Asp.Net ViewState verwendet, um die Informationen auf der Seite und benutzerdefinierte Informationen zwischen dem Client und dem Server zu speichern.
In Versionen vor 2.0 wird ViewState in versteckten Steuerelementen auf der Seite gespeichert: __VIEWSTATE
Wir können nicht ändern, wie und wo ViewState gespeichert wird.
Jetzt in 2.0 hat Asp.Net diese Funktion geöffnet, sodass ich den Speicherort von ViewState anpassen kann.
In 2.0 wurde der Page-Klasse ein neues Attribut hinzugefügt: PageStatePersister.
Wir können diese Eigenschaft überschreiben, um eine benutzerdefinierte ViewState-Speicherung zu implementieren. Diese Eigenschaft gibt eine Instanz einer von der PageStatePersister-Klasse geerbten Unterklasse zurück.
In 2.0 werden standardmäßig zwei Speichermethoden bereitgestellt: Eine dient zum Speichern auf der Seite (HiddenFieldPageStatePersister) und die andere zum Speichern in der Sitzung (SessionPageStatePersister).
Der folgende Code überschreibt die PageStatePersister-Eigenschaft und speichert ViewState in der Sitzung:
protected override PageStatePersister PageStatePersister
{
erhalten
{
return new SessionPageStatePersister(this);
}
}
Zusätzlich zu diesen beiden Standardspeichermethoden können wir die PageStatePersister-Klasse erben, um unsere eigenen Speichermethoden zu implementieren.
Der folgende Code zeigt, wie ViewState in einer Datei gespeichert wird:
Verwenden des Systems;
Verwenden von System.Data;
Verwenden von System.Configuration;
mit System.Web;
mit System.Web.Security;
mit System.Web.UI;
mit System.Web.UI.WebControls;
mit System.Web.UI.WebControls.WebParts;
mit System.Web.UI.HtmlControls;
mit System.IO;
mit System.Runtime.Serialization.Formatters.Binary;
/**//// <Zusammenfassung>
/// Zusammenfassende Beschreibung von CWingViewState
/// </summary>
öffentliche Klasse CWingViewState: PageStatePersister
{
public CWingViewState(Page page):base(page)
{
}
public override void Load()
{
ReadFile();
}
public override void Save()
{
WriteFile();
}
private void WriteFile()
{
FileStream file = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(file, base.ViewState);
file.Flush();
file.Close();
}
private void ReadFile()
{
FileStream file = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
base.ViewState = bf.Deserialize(file);
}
}
Auf bestimmten Seiten:
protected überschreiben PageStatePersister PageStatePersister
{
erhalten
{
return new CWingViewState(this);
}
}
Quelle: .Net Space BLOG