PageStatePersister Klasse

Definition

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 Sie ein PageStatePersister Objekt erstellen, das den Ansichts- und Steuerelementstatus auf dem Webserver speichert. Dies StreamPageStatePersister veranschaulicht, wie Sie die Load Save Und-Methoden zum Extrahieren und Speichern von Ansichtsstatusinformationen außer Kraft setzen. Da die Statuspersistenzmechanismen mit adaptiven Rendering- und Clientfunktionen zusammenhängen, wird die MyPageAdapter Klasse bereitgestellt, um die StreamPageStatePersister Für eine ASP.NET Anwendung zu aktivieren. Schließlich wird eine Browserfunktionendatei (.browser) bereitgestellt, um den MyPageAdapter Adapter für eine bestimmte Clientklasse zu aktivieren (in diesem Fall der Standardwebbrowser).

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 Sie eine PageAdapter Klasse erstellen, die eine Instanz zurückgibtStreamPageStatePersister, die zum Beibehalten des Ansichts- und Steuerelementstatus für eine ASP.NET Webseite verwendet wird.

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, mit der Sie ein Beispiel ausführen können, indem Sie die folgende Compilerbefehlszeile verwenden. Stellen Sie sicher, dass sich die kompilierte Assembly im Verzeichnis \Bin unterhalb des ASP.NET Anwendungsstamms 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
'

Um den MyPageAdapter Adapter zu aktivieren, müssen Sie ein Verzeichnis namens "Browser" unterhalb des ASP.NET Anwendungsstamms 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 speichernPage. Dieser Zustand, der als Ansichtszustand bezeichnet wird, besteht aus Seiten- und Steuerelementeinstellungen und Daten, die die Seite und Steuerelemente so aussehen lassen, als ob sie die gleichen sind, mit denen der Benutzer auf seiner letzten Roundtrip zum Server gesehen und interagiert hat. Es gibt mehrere Mechanismen, um den Ansichtszustand zwischen aufeinander folgenden Anforderungen an dieselbe Seite zu speichern. Die abstrakte PageStatePersister Klasse stellt die Basisklasse für diese Statusinformationsspeichermechanismen dar.

Der Standardmäßige Ansichtsstatuspersistenzmechanismus in ASP.NET besteht darin, die Statusinformationen als Base64-codierte Zeichenfolge in einem ausgeblendeten HTML-Element (ein Element mit dem type Attribut auf "hidden") auf der Seite beizubehalten. Eine ASP.NET Seite verwendet ein HiddenFieldPageStatePersister Objekt, um diese Arbeit auszuführen, indem eine IStateFormatter Instanz zum Serialisieren und Deserialisieren von Objektstatusinformationen verwendet wird. Alternativ können Sie den Ansichtsstatus für Ihre Seiten im Objekt auf dem Session Server mithilfe der SessionPageStatePersister Klasse für mobile Clients mit eingeschränkter Bandbreite und Ressourcen speichern. In einigen Fällen können Sie die Ansichtsstatuspersistenz vollständig deaktivieren. Wenn Sie dies tun, ist das Ergebnis, dass sich manchmal Seiten und Steuerelemente, die auf die Zustandspersistenz angewiesen sind, nicht richtig verhalten. Weitere Informationen zur Seitenstatusverwaltung und zum Ansichtsstatus finden Sie unter ASP.NET Übersicht über die Zustandsverwaltung.

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 Statusinformationen zwischen Anforderungen. Um die benutzerdefinierte Zustandsbehandlung in Ihrem Steuerelement auszuführen, überschreiben Sie die LoadViewState Und-Methoden SaveViewState . Alle Zustandsinformationen, die in diesem Wörterbuch gespeichert sind, gehen verloren, wenn der Ansichtszustand von einem Seitenentwickler deaktiviert wird. Um dies zu verringern, können Sie in ASP.NET Version 2.0 kritische Statusinformationen in einem separaten Objekt speichern, der als Steuerelementzustand bezeichnet wird. Das Steuerelementstatusobjekt ist nicht betroffen, wenn der Ansichtszustand von einem Seitenentwickler deaktiviert wird. Das Speichern von Zustandsinformationen im Steuerelementstatusobjekt erfordert, dass das Steuerelement die LoadControlState SaveControlState Methoden außer Kraft setzt und dass das Steuerelement registriert wird, um Zustandsinformationen jedes Mal zu speichern, wenn das Steuerelement initialisiert wird. Sie können ein Steuerelement registrieren, um den Steuerelementstatus zu verwenden, indem Sie die OnInit Methode außer Kraft setzen und die RegisterRequiresControlState Methode aufrufen. Weitere Informationen zur Verwendung des ViewState Eigenschaften- und Steuerelementstatus beim Entwickeln von Steuerelementen finden Sie unter Entwickeln von benutzerdefinierten ASP.NET Serversteuerelementen.

Um den Ansichtsstatus für Clients beizubehalten, die die vorhandenen Ansichtsstatuspersistenzmechanismen nicht unterstützen können, können Sie die PageStatePersister Klasse erweitern, um Ihre eigenen Ansichtsstatuspersistenzmethoden einzuführen, und Sie können Seitenadapter verwenden, um Ihre ASP.NET Anwendung so zu konfigurieren, dass unterschiedliche Anzeigestatuspersistenzmechanismen basierend auf dem Clienttyp verwendet werden, auf dem eine Seite bereitgestellt wird. Klassen, die von der PageStatePersister Klasse abgeleitet werden, müssen die abstrakte Save Methode außer Kraft setzen, um den Status und den Kontrollzustand im Persistenzmedium zu speichern und die Methode außer Kraft zu setzen, um sie Load zu extrahieren. Wenn Sie den Ansichtszustand und den Steuerelementstatus in eine Zeichenfolge serialisieren müssen, können Sie das Objekt verwenden, auf das IStateFormatter mithilfe der StateFormatter Eigenschaft zugegriffen wird. Es serialisiert und deerialisiert Objektstatusinformationen effizient in eine Base64-codierte Zeichenfolge. Sie können die StateFormatter Eigenschaft auch außer Kraft setzen, um ihren eigenen Serialisierungsmechanismus für den Objektzustand anzugeben.

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)

Gilt für

Siehe auch