PageStatePersister Classe

Definizione

Fornisce le funzionalità di base per i meccanismi di persistenza dello stato di visualizzazione disponibili in ASP.NET.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
Ereditarietà
PageStatePersister
Derivato

Esempio

Nell'esempio di codice seguente viene illustrato come creare un PageStatePersister oggetto che salva lo stato di visualizzazione e controllo nel server Web. StreamPageStatePersister Viene illustrato come eseguire l'override dei Load metodi e Save per estrarre e salvare le informazioni sullo stato di visualizzazione. Poiché i meccanismi di persistenza dello stato sono correlati al rendering adattivo e alle funzionalità client, la MyPageAdapter classe viene fornita per attivare per StreamPageStatePersister un'applicazione ASP.NET. Infine, viene fornito un file di funzionalità del browser (con estensione browser) per abilitare l'adattatore MyPageAdapter per una classe specifica di client (in questo caso, il Web browser predefinito).

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

Nell'esempio di codice seguente viene illustrato come creare una classe che restituisce un'istanza PageAdapter di StreamPageStatePersister, utilizzata per rendere persistente lo stato di visualizzazione e controllo per una pagina Web ASP.NET.

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

Compilare queste due classi in un assembly che è possibile usare per eseguire un esempio usando la riga di comando del compilatore seguente. Assicurarsi che l'assembly compilato si trova nella directory \Bin sotto la radice dell'applicazione ASP.NET.

// 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
'

Infine, per abilitare l'adattatore MyPageAdapter , è necessario creare una directory denominata Browser sotto la radice dell'applicazione ASP.NET e includere un file con estensione browser con informazioni di configurazione. L'elemento <refid> nel file di configurazione indica che la configurazione sostituisce i valori specificati per il browser predefinito nel file di configurazione Default.browser. In questo esempio MyPageAdapter viene usato per ASP.NET pagine Web (in cui in genere non viene usato alcun adattatore).

<browsers>  
    <browser refid="Default" >  
        <controlAdapters>  
            <adapter   
                controlType="System.Web.UI.Page"                              
                adapterType="Samples.AspNet.CS.MyPageAdapter" />  
        </controlAdapters>  
    </browser>  
</browsers>  

Commenti

Le richieste e le risposte HTTP sono intrinsecamente senza stato. Per mantenere le informazioni sullo stato tra richieste HTTP, ASP.NET pagine del server possono archiviare Page lo stato. Questo stato, denominato stato di visualizzazione, è costituito da impostazioni di pagina e controllo e dati che rendono la pagina e i controlli visualizzati come se fossero gli stessi con cui l'utente ha visto e interagito durante l'ultimo round trip al server. Esistono diversi meccanismi per archiviare lo stato di visualizzazione tra richieste successive alla stessa pagina. La classe astratta PageStatePersister rappresenta la classe base per questi meccanismi di archiviazione delle informazioni sullo stato.

Il meccanismo di persistenza dello stato di visualizzazione predefinito in ASP.NET consiste nel mantenere le informazioni sullo stato come stringa con codifica Base64 in un elemento HTML nascosto (un elemento con l'attributo type impostato su "hidden") nella pagina. Una pagina ASP.NET usa un HiddenFieldPageStatePersister oggetto per eseguire questa operazione, utilizzando un'istanza IStateFormatter di per serializzare e deserializzare le informazioni sullo stato dell'oggetto. In alternativa, è possibile archiviare lo stato di visualizzazione per le pagine nell'oggetto Session nel server usando la SessionPageStatePersister classe per i client mobili con larghezza di banda e risorse limitate. In alcuni casi, è possibile disabilitare completamente la persistenza dello stato di visualizzazione. In questo caso, il risultato è che a volte pagine e controlli che si basano sulla persistenza dello stato non si comportano correttamente. Per altre informazioni sulla gestione dello stato della pagina e sullo stato di visualizzazione, vedere panoramica di gestione dello stato di ASP.NET.

Se si scrivono controlli, è possibile archiviare le informazioni sullo stato per i controlli nel ViewState dizionario, ovvero un StateBag oggetto . Uno sviluppatore recupererà lo stato del controllo tramite la ControlState proprietà . Si assegnano chiavi e valori alla ViewState proprietà e l'oggetto Page serializza le informazioni sullo stato tra le richieste. Per eseguire la gestione dello stato personalizzata nel controllo, eseguire l'override dei LoadViewState metodi e SaveViewState . Tutte le informazioni sullo stato archiviate in questo dizionario vengono perse quando lo stato di visualizzazione viene disabilitato da uno sviluppatore di pagine. Per attenuare questo problema, in ASP.NET versione 2.0 è possibile archiviare informazioni sullo stato critico in un oggetto separato, denominato stato di controllo. L'oggetto stato del controllo non è interessato quando lo stato di visualizzazione è disabilitato da uno sviluppatore di pagine. L'archiviazione delle informazioni sullo stato del controllo richiede che il controllo e i metodi e SaveControlState che il controllo sia registrato per archiviare LoadControlState le informazioni sullo stato nello stato di controllo ogni volta che il controllo viene inizializzato. È possibile registrare un controllo per usare lo stato del controllo eseguendo l'override del OnInit metodo e chiamando il RegisterRequiresControlState metodo . Per altre informazioni sull'uso della proprietà e dello stato di ViewState controllo durante lo sviluppo di controlli, vedere Sviluppo di controlli server personalizzati ASP.NET.

Per mantenere lo stato di visualizzazione nei client che non supportano i meccanismi di persistenza dello stato di visualizzazione esistente, è possibile estendere la PageStatePersister classe per introdurre metodi di persistenza dello stato di visualizzazione personalizzati ed è possibile usare adattatori di pagina per configurare l'applicazione ASP.NET per usare meccanismi di persistenza dello stato di visualizzazione diversi in base al tipo di client a cui viene servita una pagina. Le classi che derivano dalla classe devono eseguire l'override PageStatePersister del metodo astratto Save per archiviare lo stato di visualizzazione e lo stato del controllo nel supporto di persistenza ed eseguire l'override del Load metodo per estrarlo. Se è necessario serializzare lo stato di visualizzazione e lo stato di controllo in una stringa, è possibile utilizzare l'oggetto IStateFormatter a cui si accede usando la StateFormatter proprietà . Serializza e deserializza in modo efficiente le informazioni sullo stato dell'oggetto in una stringa con codifica Base64. È anche possibile eseguire l'override della StateFormatter proprietà per fornire il meccanismo di serializzazione dello stato dell'oggetto.

Costruttori

PageStatePersister(Page)

Inizializza una nuova istanza della classe PageStatePersister.

Proprietà

ControlState

Ottiene o imposta un oggetto che rappresenta i dati utilizzati dai controlli contenuti nell'oggetto Page corrente per la persistenza tra le richieste HTTP inviate al server Web.

Page

Ottiene o imposta l'oggetto Page per il quale viene creato il meccanismo di persistenza dello stato di visualizzazione.

StateFormatter

Ottiene un oggetto IStateFormatter utilizzato per serializzare e deserializzare le informazioni sullo stato contenute nelle proprietà ViewState e ControlState durante le chiamate dei metodi Save() e Load().

ViewState

Ottiene o imposta un oggetto che rappresenta i dati utilizzati dai controlli contenuti nell'oggetto Page corrente per la persistenza tra le richieste HTTP inviate al server Web.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
Load()

Le classi derivate eseguono l'override di questo metodo per deserializzare e caricare informazioni persistenti sullo stato quando un oggetto Page inizializza la gerarchia dei controlli.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Save()

Le classi derivate eseguono l'override di questo metodo per serializzare informazioni persistenti sullo stato quando un oggetto Page viene scaricato dalla memoria.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Vedi anche