PageStatePersister Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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) |