PageStatePersister Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt de basisfunctionaliteit voor ASP.NET weergavestatuspersistentiemechanismen.
public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
- Overname
-
PageStatePersister
- Afgeleid
Voorbeelden
In het volgende codevoorbeeld ziet u hoe u een PageStatePersister object maakt waarmee de weergave- en controlestatus op de webserver wordt opgeslagen. Het StreamPageStatePersister laat zien hoe u de en Load methoden voor het Save extraheren en opslaan van weergavestatusgegevens overschrijft en opslaat. Omdat de statuspersistentiemechanismen zijn gerelateerd aan adaptieve rendering- en clientmogelijkheden, wordt de klasse MyPageAdapter geleverd om de StreamPageStatePersister te activeren voor een ASP.NET-toepassing. Ten slotte wordt een browsermogelijkhedenbestand (.browser) geboden om de MyPageAdapter adapter in te schakelen voor een specifieke klasse van clients (in dit geval de standaardwebbrowser).
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
In het volgende codevoorbeeld ziet u hoe u een PageAdapter-klasse maakt die een exemplaar van StreamPageStatePersister retourneert, dat wordt gebruikt om de weergave- en controlestatus voor een ASP.NET webpagina te behouden.
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
Compileer deze twee klassen in een assembly die u kunt gebruiken om een voorbeeld uit te voeren met behulp van de volgende compiler-opdrachtregel. Zorg ervoor dat de gecompileerde assembly zich in de map \Bin bevindt onder de hoofdmap van de ASP.NET toepassing.
// 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
'
Als u de MyPageAdapter-adapter wilt inschakelen, moet u een map maken met de naam Browsers onder de hoofdmap van de ASP.NET toepassing en een browserbestand met configuratiegegevens opnemen. Het <refid> element in het configuratiebestand geeft aan dat de configuratie de waarden overschrijft die zijn opgegeven voor de standaardbrowser in het configuratiebestand Default.browser. In dit voorbeeld wordt MyPageAdapter gebruikt voor ASP.NET webpagina's (waarbij normaal gesproken geen adapter wordt gebruikt).
<browsers>
<browser refid="Default" >
<controlAdapters>
<adapter
controlType="System.Web.UI.Page"
adapterType="Samples.AspNet.CS.MyPageAdapter" />
</controlAdapters>
</browser>
</browsers>
Opmerkingen
De HTTP-aanvragen en -antwoorden zijn inherent staatloos. Voor het onderhouden van statusinformatie tussen HTTP-aanvragen kunnen ASP.NET serverpagina's Page status opslaan. Deze status, de weergavestatus genoemd, bestaat uit pagina- en besturingsinstellingen en -gegevens die ervoor zorgen dat de pagina en besturingselementen worden weergegeven alsof ze dezelfde zijn die de gebruiker tijdens de laatste retour naar de server heeft gezien en ermee heeft gecommuniceerd. Er bestaan verschillende mechanismen voor het opslaan van de weergavestatus tussen opeenvolgende aanvragen op dezelfde pagina. De abstracte PageStatePersister klasse vertegenwoordigt de basisklasse voor deze opslagmechanismen voor statusinformatie.
Het standaardmechanisme voor weergavestatuspersistentie in ASP.NET is het onderhouden van de statusgegevens als een met Base64 gecodeerde tekenreeks in een verborgen HTML-element (een element met het kenmerk type ingesteld op "hidden") op de pagina. Een ASP.NET pagina maakt gebruik van een HiddenFieldPageStatePersister-object om dit werk uit te voeren, met behulp van een IStateFormatter-exemplaar om objectstatusinformatie te serialiseren en deserialiseren. U kunt ook de weergavestatus voor uw pagina's opslaan in het Session object op de server met behulp van de SessionPageStatePersister klasse voor mobiele clients met beperkte bandbreedte en resources. In sommige gevallen kunt u de weergavestatuspersistentie helemaal uitschakelen. Als u dit doet, is het resultaat dat pagina's en besturingselementen die afhankelijk zijn van statuspersistentie, zich niet correct gedragen. Zie ASP.NET State Management Overview voor meer informatie over paginastatusbeheer en weergavestatus.
Als u besturingselementen schrijft, kunt u statusinformatie opslaan voor de besturingselementen in de ViewState woordenlijst. Dit is een StateBag object. Een ontwikkelaar haalt de controlestatus op via de ControlState eigenschap. U wijst sleutels en waarden toe aan de ViewState eigenschap en het Page object serialiseert de statusgegevens tussen aanvragen. Als u aangepaste statusafhandeling in uw controle wilt uitvoeren, overschrijft u de LoadViewState en SaveViewState methoden. Statusinformatie die in deze woordenlijst is opgeslagen, gaat verloren wanneer de weergavestatus is uitgeschakeld door een paginaontwikkelaar. Om dit te verhelpen, kunt u in ASP.NET versie 2.0 kritieke statusgegevens opslaan in een afzonderlijk object, de besturingsstatus genoemd. Het object van de besturingsstatus wordt niet beïnvloed wanneer de weergavestatus is uitgeschakeld door een paginaontwikkelaar. Als u statusinformatie opslaat in het object controlestatus, moet het besturingselement de LoadControlState en SaveControlState methoden overschrijven en moet het besturingselement worden geregistreerd om statusgegevens op te slaan in de controlestatus telkens wanneer het besturingselement wordt geïnitialiseerd. U kunt een besturingselement registreren om de controlestatus te gebruiken door de OnInit methode te overschrijven en de RegisterRequiresControlState methode aan te roepen. Zie ViewState voor meer informatie over het gebruik van de eigenschap /controlstatus.
Als u de weergavestatus wilt behouden op clients die de bestaande persistentiemechanismen voor weergavestatussen niet kunnen ondersteunen, kunt u de PageStatePersister-klasse uitbreiden om uw eigen weergavestatuspersistentiemethoden te introduceren. U kunt paginaadapters gebruiken om uw ASP.NET toepassing te configureren voor het gebruik van verschillende mechanismen voor weergavestatuspersistentie op basis van het type client waarop een pagina wordt geleverd. Klassen die zijn afgeleid van de PageStatePersister klasse moeten de abstracte Save methode overschrijven om de weergavestatus en controlestatus op te slaan in het persistentiemedium en de Load methode overschrijven om deze te extraheren. Als u de weergavestatus en de controlestatus wilt serialiseren naar een tekenreeks, kunt u het IStateFormatter object gebruiken dat wordt geopend met behulp van de StateFormatter eigenschap. Het serialiseert en ontserialiseerde objectstatusgegevens efficiënt naar een met Base64 gecodeerde tekenreeks. U kunt de StateFormatter eigenschap ook overschrijven om uw eigen objectstatussenerialisatiemechanisme op te geven.
Constructors
| Name | Description |
|---|---|
| PageStatePersister(Page) |
Initialiseert een nieuw exemplaar van de PageStatePersister klasse. |
Eigenschappen
| Name | Description |
|---|---|
| ControlState |
Hiermee haalt u een object op of stelt u een object in dat de gegevens vertegenwoordigt die worden beheerd door het huidige Page object dat wordt gebruikt voor het persistent maken van HTTP-aanvragen naar de webserver. |
| Page |
Hiermee wordt het Page object opgehaald of ingesteld waarvoor het persistentiemechanisme voor de weergavestatus wordt gemaakt. |
| StateFormatter |
Hiermee haalt u een IStateFormatter object op dat wordt gebruikt om de statusinformatie in de ViewState en ControlState eigenschappen te serialiseren en deserialiseren tijdens aanroepen naar de Save() en Load() methoden. |
| ViewState |
Hiermee haalt u een object op of stelt u een object in dat de gegevens vertegenwoordigt die worden beheerd door het huidige Page object dat wordt gebruikt voor het persistent maken van HTTP-aanvragen naar de webserver. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| Load() |
Overschreven door afgeleide klassen om persistente statusinformatie te deserialiseren en laden wanneer een Page object de besturingshiërarchie initialiseert. |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| Save() |
Overschreven door afgeleide klassen om persistente statusinformatie te serialiseren wanneer een Page object uit het geheugen wordt verwijderd. |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |