PageStatePersister Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die Basisfunktionen für die Dauerhaftigkeitsmechanismen für den Ansichtszustand in ASP.NET bereit.
public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
- Vererbung
-
PageStatePersister
- Abgeleitet
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie ein PageStatePersister Objekt erstellt wird, das den Ansichts- und Steuerelementstatus auf dem Webserver speichert. Die StreamPageStatePersister
veranschaulicht, wie die Load Methoden und Save überschrieben werden, um Ansichtsstatusinformationen zu extrahieren und zu speichern. Da die Zustandspersistenzmechanismen mit adaptivem Rendering und Clientfunktionen zusammenhängen, wird die MyPageAdapter
-Klasse bereitgestellt, um das StreamPageStatePersister
für eine ASP.NET Anwendung zu aktivieren. Schließlich wird eine Browserfunktionendatei (.browser) bereitgestellt, um den MyPageAdapter
Adapter für eine bestimmte Klasse von Clients (in diesem Fall den Standardwebbrowser) zu aktivieren.
namespace Samples.AspNet.CS
{
using System;
using System.IO;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
//
// The StreamPageStatePersister is an example view state
// persistence mechanism that persists view and control
// state on the Web server.
//
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
public class StreamPageStatePersister : PageStatePersister
{
public StreamPageStatePersister(Page page)
: base(page)
{
}
//
// Load ViewState and ControlState.
//
public override void Load()
{
Stream stateStream = GetSecureStream();
// Read the state string, using the StateFormatter.
StreamReader reader = new StreamReader(stateStream);
IStateFormatter formatter = this.StateFormatter;
string fileContents = reader.ReadToEnd();
// Deserilize returns the Pair object that is serialized in
// the Save method.
Pair statePair = (Pair)formatter.Deserialize(fileContents);
ViewState = statePair.First;
ControlState = statePair.Second;
reader.Close();
stateStream.Close();
}
//
// Persist any ViewState and ControlState.
//
public override void Save()
{
if (ViewState != null || ControlState != null)
{
if (Page.Session != null)
{
Stream stateStream = GetSecureStream();
StreamWriter writer = new StreamWriter(stateStream);
IStateFormatter formatter = this.StateFormatter;
Pair statePair = new Pair(ViewState, ControlState);
// Serialize the statePair object to a string.
string serializedState = formatter.Serialize(statePair);
writer.Write(serializedState);
writer.Close();
stateStream.Close();
}
else
{
throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
}
}
}
// Return a secure Stream for your environment.
private Stream GetSecureStream()
{
// You must provide the implementation to build
// a secure Stream for your environment.
return null;
}
}
}
Imports System.IO
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Namespace Samples.AspNet.VB
' The StreamPageStatePersister is an example view state
' persistence mechanism that persists view and control
' state on the Web server.
'
<AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class StreamPageStatePersister
Inherits PageStatePersister
Public Sub New(ByVal page As Page)
MyBase.New(page)
End Sub
'
' Load ViewState and ControlState.
'
Public Overrides Sub Load()
Dim stateStream As Stream
stateStream = GetSecureStream()
' Read the state string, using the StateFormatter.
Dim reader As New StreamReader(stateStream)
Dim serializedStatePair As String
serializedStatePair = reader.ReadToEnd
Dim statePair As Pair
Dim formatter As IStateFormatter
formatter = Me.StateFormatter
' Deserilize returns the Pair object that is serialized in
' the Save method.
statePair = CType(formatter.Deserialize(serializedStatePair), Pair)
ViewState = statePair.First
ControlState = statePair.Second
reader.Close()
stateStream.Close()
End Sub
'
' Persist any ViewState and ControlState.
'
Public Overrides Sub Save()
If Not (ViewState Is Nothing) OrElse Not (ControlState Is Nothing) Then
If Not (Page.Session Is Nothing) Then
Dim stateStream As Stream
stateStream = GetSecureStream()
' Write a state string, using the StateFormatter.
Dim writer As New StreamWriter(stateStream)
Dim formatter As IStateFormatter
formatter = Me.StateFormatter
Dim statePair As New Pair(ViewState, ControlState)
Dim serializedState As String
serializedState = formatter.Serialize(statePair)
writer.Write(serializedState)
writer.Close()
stateStream.Close()
Else
Throw New InvalidOperationException("Session needed for StreamPageStatePersister.")
End If
End If
End Sub
' Return a secure Stream for your environment.
Private Function GetSecureStream() As Stream
' You must provide the implementation to build
' a secure Stream for your environment.
Return Nothing
End Function
End Class
End Namespace
Im folgenden Codebeispiel wird veranschaulicht, wie eine PageAdapter Klasse erstellt wird, die eine Instanz von StreamPageStatePersister
zurückgibt, die verwendet wird, um den Ansichts- und Steuerungsstatus für eine ASP.NET Webseite beizubehalten.
namespace Samples.AspNet.CS {
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class MyPageAdapter : System.Web.UI.Adapters.PageAdapter {
public override PageStatePersister GetStatePersister() {
return new Samples.AspNet.CS.StreamPageStatePersister(Page);
}
}
}
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.UI
Namespace Samples.AspNet.VB
<AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class MyPageAdapter
Inherits System.Web.UI.Adapters.PageAdapter
Public Overrides Function GetStatePersister() As PageStatePersister
Return New Samples.AspNet.VB.StreamPageStatePersister(Page)
End Function 'GetStatePersister
End Class
End Namespace
Kompilieren Sie diese beiden Klassen in eine Assembly, die Sie verwenden können, um ein Beispiel mit der folgenden Compiler-Befehlszeile auszuführen. Stellen Sie sicher, dass sich die kompilierte Assembly im Verzeichnis \Bin unter dem ASP.NET Anwendungsstamm befindet.
// C:\>csc /t:library /out:C:\inetpub\wwwroot\bin\Samples.AspNet.CS.dll MyPageAdapter.cs TextFilePageStatePersister.cs
//
// C:\>
' C:\>vbc /t:library /out:C:\inetpub\wwwroot\bin\Samples.AspNet.VB.dll MyPageAdapter.vb TextFilePageStatePersister.vb
'
Zum Aktivieren des MyPageAdapter
Adapters müssen Sie schließlich ein Verzeichnis namens Browser unter dem ASP.NET Anwendungsstamm erstellen und eine BROWSER-Datei mit Konfigurationsinformationen einschließen. Das <refid>
Element in der Konfigurationsdatei gibt an, dass die Konfiguration die werte außer Kraft setzt, die für den Standardbrowser in der Konfigurationsdatei Default.browser angegeben sind. In diesem Beispiel MyPageAdapter
wird für ASP.NET Webseiten verwendet (wo normalerweise kein Adapter verwendet wird).
<browsers>
<browser refid="Default" >
<controlAdapters>
<adapter
controlType="System.Web.UI.Page"
adapterType="Samples.AspNet.CS.MyPageAdapter" />
</controlAdapters>
</browser>
</browsers>
Hinweise
Die HTTP-Anforderungen und -Antworten sind inhärent zustandslos. Um Zustandsinformationen zwischen HTTP-Anforderungen beizubehalten, können ASP.NET Serverseiten den Zustand speichern Page . Dieser Zustand, der als Ansichtszustand bezeichnet wird, besteht aus Seiten- und Steuerelementeinstellungen und Daten, die dazu führen, dass die Seite und die Steuerelemente so aussehen, als wären sie dieselben, die der Benutzer bei seiner letzten Rundreise zum Server gesehen und interagiert hat. Es gibt mehrere Mechanismen zum Speichern des Ansichtszustands zwischen aufeinander folgenden Anforderungen an dieselbe Seite. Die abstrakte PageStatePersister Klasse stellt die Basisklasse für diese Zustandsinformationsspeichermechanismen dar.
Der Standardmechanismus für die Zustandspersistenz der Ansicht in ASP.NET besteht darin, die Zustandsinformationen als Base64-codierte Zeichenfolge in einem ausgeblendeten HTML-Element (ein Element mit festgelegtem type
Attribut) auf der Seite beizubehalten "hidden"
. Eine ASP.NET Seite verwendet ein HiddenFieldPageStatePersister -Objekt, um diese Arbeit auszuführen. Dabei wird eine IStateFormatter Instanz zum Serialisieren und Deserialisieren von Objektstatusinformationen verwendet. Alternativ können Sie den Ansichtsstatus für Ihre Seiten im Objekt auf dem Session Server speichern, indem Sie die SessionPageStatePersister Klasse für mobile Clients mit begrenzter Bandbreite und Ressourcen verwenden. In einigen Fällen können Sie die Ansichtsstatuspersistenz ganz deaktivieren. Wenn Sie dies tun, ist das Ergebnis, dass sich Seiten und Steuerelemente, die auf der Zustandspersistenz basieren, manchmal nicht ordnungsgemäß verhalten. Weitere Informationen zur Seitenzustandsverwaltung und zum Ansichtsstatus finden Sie unter ASP.NET Statusverwaltung– Übersicht.
Wenn Sie Steuerelemente schreiben, können Sie Zustandsinformationen für die Steuerelemente im ViewState Wörterbuch speichern, das ein StateBag -Objekt ist. Ein Entwickler ruft den Steuerelementstatus über die ControlState -Eigenschaft ab. Sie weisen der ViewState -Eigenschaft Schlüssel und Werte zu, und das Page -Objekt serialisiert die Zustandsinformationen zwischen Anforderungen. Um die benutzerdefinierte Zustandsbehandlung in Ihrem Steuerelement auszuführen, überschreiben Sie die LoadViewState Methoden und SaveViewState . Alle Zustandsinformationen, die in diesem Wörterbuch gespeichert sind, gehen verloren, wenn der Ansichtszustand von einem Seitenentwickler deaktiviert wird. Um dies zu mindern, können Sie in ASP.NET Version 2.0 wichtige Zustandsinformationen in einem separaten Objekt speichern, das als Kontrollzustand bezeichnet wird. Das Steuerelementstatusobjekt ist nicht betroffen, wenn der Ansichtszustand von einem Seitenentwickler deaktiviert wird. Zum Speichern von Zustandsinformationen im Steuerelementzustandsobjekt muss das Steuerelement die LoadControlState Methoden und außer Kraft setzen und SaveControlState das Steuerelement jedes Mal registriert werden, um Zustandsinformationen im Kontrollzustand zu speichern, wenn das Steuerelement initialisiert wird. Sie können ein Steuerelement registrieren, um den Steuerelementstatus zu verwenden, indem Sie die OnInit -Methode überschreiben und die RegisterRequiresControlState -Methode aufrufen. Weitere Informationen zur Verwendung des Eigenschafts ViewState - und Steuerelementstatus beim Entwickeln von Steuerelementen finden Sie unter Entwickeln benutzerdefinierter ASP.NET Serversteuerelemente.
Um den Ansichtsstatus auf Clients beizubehalten, die die vorhandenen Ansichtsstatuspersistenzmechanismen nicht unterstützen können, können Sie die PageStatePersister -Klasse erweitern, um Ihre eigenen Ansichtszustandspersistenzmethoden einzuführen, und Sie können Seitenadapter verwenden, um Ihre ASP.NET Anwendung so zu konfigurieren, dass unterschiedliche Ansichtszustandspersistenzmechanismen basierend auf dem Clienttyp verwendet werden, für den eine Seite bereitgestellt wird. Klassen, die von der PageStatePersister -Klasse abgeleitet werden, müssen die abstrakte Save Methode überschreiben, um den Ansichts- und Steuerungszustand im Persistenzmedium zu speichern, und die Load Methode zum Extrahieren überschreiben. Wenn Sie den Ansichtszustand und den Steuerstatus in eine Zeichenfolge serialisieren müssen, können Sie das Objekt verwenden, auf das IStateFormatter mithilfe der StateFormatter -Eigenschaft zugegriffen wird. Es serialisiert und deserialisiert Objektstatusinformationen effizient in eine Base64-codierte Zeichenfolge. Sie können die StateFormatter -Eigenschaft auch überschreiben, um Einen eigenen Objektzustandsserialisierungsmechanismus zur Verfügung zu stellen.
Konstruktoren
PageStatePersister(Page) |
Initialisiert eine neue Instanz der PageStatePersister-Klasse. |
Eigenschaften
ControlState |
Ruft ein Objekt ab, das die Daten darstellt, die Steuerelemente, die sich im aktuellen Page-Objekt befinden, über HTTP-Anforderungen an den Webserver hinweg beibehalten, oder legt dieses fest. |
Page |
Ruft das Page-Objekt fest, für das der Dauerhaftigkeitsmechanismus für den Ansichtszustand erstellt wird, oder legt dieses fest. |
StateFormatter |
Ruft ein IStateFormatter-Objekt ab, das bei Aufrufen der ViewState-Methode und der ControlState-Methode zum Serialisieren und Deserialisieren der in der Save()-Eigenschaft und der Load()-Eigenschaft befindlichen Zustandsinformationen verwendet wird. |
ViewState |
Ruft ein Objekt ab, das die Daten darstellt, die Steuerelemente, die sich im aktuellen Page-Objekt befinden, über HTTP-Anforderungen an den Webserver hinweg beibehalten, oder legt dieses fest. |
Methoden
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
Load() |
Von abgeleiteten Klassen zum Deserialisieren und Laden beibehaltener Zustandsinformationen überschrieben, wenn ein Page-Objekt seine Steuerelementhierarchie initialisiert. |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
Save() |
Von abgeleiteten Klassen zum Serialisieren beibehaltener Zustandsinformationen überschrieben, wenn ein Page-Objekt aus dem Speicher entladen wird. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |