PageStatePersister Klasa

Definicja

Zapewnia podstawową funkcjonalność dla mechanizmów ASP.NET widoku stanu.Provides the base functionality for ASP.NET view state persistence mechanisms.

public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
Dziedziczenie
PageStatePersister
Pochodne

Przykłady

Poniższy przykład kodu pokazuje, jak utworzyć PageStatePersister obiekt, który zapisuje stan widoku i kontroli na serwerze sieci Web.The following code example demonstrates how to create a PageStatePersister object that saves view and control state on the Web server. StreamPageStatePersisterDemonstruje sposób przesłonięcia Load metod i Save w celu wyodrębnienia i zapisania informacji o stanie widoku.The StreamPageStatePersister demonstrates how to override the Load and Save methods to extract and save view state information. Ze względu na to, że mechanizmy trwałości stanu są powiązane z możliwością dostosowania do funkcji przetwarzania i obsługi klienta, MyPageAdapter Klasa jest udostępniana w celu aktywowania StreamPageStatePersister aplikacji ASP.NET.Because the state persistence mechanisms are related to adaptive rendering and client capabilities, the MyPageAdapter class is provided to activate the StreamPageStatePersister for an ASP.NET application. Na koniec jest dostarczany plik funkcji przeglądarki (przeglądarki), aby umożliwić MyPageAdapter adapterowi dla określonej klasy klientów (w tym przypadku domyślna przeglądarka sieci Web).Finally, a browser capabilities (.browser) file is provided to enable the MyPageAdapter adapter for a specific class of clients (in this case, the default Web browser).

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

Poniższy przykład kodu ilustruje sposób tworzenia PageAdapter klasy, która zwraca wystąpienie StreamPageStatePersister , które jest używane do utrwalania stanu widoku i kontroli dla strony sieci Web ASP.NET.The following code example demonstrates how to create a PageAdapter class that returns an instance of StreamPageStatePersister, which is used to persist view and control state for an ASP.NET Web page.

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

Skompiluj te dwie klasy do zestawu, którego można użyć do uruchomienia przykładu, przy użyciu następującego wiersza polecenia kompilatora.Compile these two classes into an assembly that you can use to run a sample, using the following compiler command line. Upewnij się, że skompilowany zestaw znajduje się w katalogu \Bin pod katalogiem głównym aplikacji ASP.NET.Ensure that the compiled assembly is in the \Bin directory underneath the ASP.NET application root.

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

Na koniec aby włączyć MyPageAdapter kartę, należy utworzyć katalog o nazwie browsers pod katalogiem głównym aplikacji ASP.NET i dołączyć plik. Browser z informacjami o konfiguracji.Finally, to enable the MyPageAdapter adapter, you must create a directory named Browsers underneath the ASP.NET application root, and include a .browser file with configuration information. <refid>Element w pliku konfiguracji wskazuje, że konfiguracja zastępuje wartości określone dla domyślnej przeglądarki w domyślnym pliku konfiguracyjnym przeglądarki.The <refid> element in the configuration file indicates that the configuration overrides the values specified for the default browser in the Default.browser configuration file. W tym przykładzie MyPageAdapter jest używany dla stron sieci Web ASP.NET (gdzie zwykle nie jest używana karta).In this example, MyPageAdapter is used for ASP.NET Web pages (where normally no adapter is used).

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

Uwagi

Żądania HTTP i odpowiedzi są z natury bezstanowe.The HTTP requests and responses are inherently stateless. Aby zachować informacje o stanie między żądaniami HTTP, strony serwera ASP.NET mogą przechowywać Page stan.To maintain state information between HTTP requests, ASP.NET server pages can store Page state. Ten stan, nazywany stanem widoku, składa się z ustawień strony i kontroli oraz danych, które sprawiają, że strona i kontrolki pojawiają się tak, jakby były to te same, które użytkownik wywołał i połączył się w ostatniej podróży z serwerem.This state, called view state, consists of page and control settings and data that make the page and controls appear as if they are the same ones that the user saw and interacted with on their last round trip to the server. Istnieje kilka mechanizmów przechowywania stanu widoku między kolejnymi żądaniami do tej samej strony.Several mechanisms exist to store view state between successive requests to the same page. Klasa abstrakcyjna PageStatePersister reprezentuje klasę bazową dla tych mechanizmów magazynu informacji o stanie.The abstract PageStatePersister class represents the base class for these state information storage mechanisms.

Domyślnym mechanizmem trwałości stanu widoku w ASP.NET jest utrzymywanie informacji o stanie jako ciągu zakodowanego algorytmem Base64 w ukrytym elemencie HTML (element z type atrybutem ustawionym na "hidden" ) na stronie.The default view state persistence mechanism in ASP.NET is to maintain the state information as a Base64-encoded string in a hidden HTML element (an element with the type attribute set to "hidden") on the page. Strona ASP.NET używa HiddenFieldPageStatePersister obiektu do wykonania tej pracy przy użyciu IStateFormatter wystąpienia do serializacji i deserializacji informacji o stanie obiektu.An ASP.NET page uses a HiddenFieldPageStatePersister object to perform this work, using an IStateFormatter instance to serialize and deserialize object state information. Alternatywnie można przechowywać stan widoku stron w Session obiekcie na serwerze przy użyciu SessionPageStatePersister klasy dla klientów mobilnych z ograniczoną przepustowością i zasobami.Alternately, you can store the view state for your pages in the Session object on the server using the SessionPageStatePersister class for mobile clients with limited bandwidth and resources. W niektórych przypadkach można całkowicie wyłączyć opcję wyświetlania stanu trwałości.In some cases, you might disable view state persistence altogether. Jeśli to zrobisz, wynikiem jest to, że czasami strony i kontrolki, które opierają się na trwałości stanu, nie działają prawidłowo.If you do this, the result is that sometimes pages and controls that rely on state persistence do not behave correctly. Aby uzyskać więcej informacji o zarządzaniu stanem strony i stanie widoku, zobacz ASP.NET State Management — Omówienie.For more information about page state management and view state, see ASP.NET State Management Overview.

W przypadku pisania kontrolek można przechowywać informacje o stanie dla kontrolek w ViewState słowniku, który jest StateBag obiektem.If you are writing controls, you can store state information for the controls in the ViewState dictionary, which is a StateBag object. Deweloper odzyska stan kontroli za pomocą ControlState właściwości.A developer would retrieve the control state through the ControlState property. Do właściwości przypisuje się klucze i wartości ViewState , a Page obiekt serializować informacje o stanie między żądaniami.You assign keys and values to the ViewState property, and the Page object serializes the state information between requests. Aby wykonać niestandardową obsługę stanu w formancie, Zastąp LoadViewState SaveViewState metody i.To perform custom state handling in your control, override the LoadViewState and SaveViewState methods. Wszelkie informacje o stanie przechowywane w tym słowniku zostaną utracone, gdy stan widoku jest wyłączony przez dewelopera strony.Any state information that is stored in this dictionary is lost when view state is disabled by a page developer. Aby rozwiązać ten problem, w programie ASP.NET w wersji 2,0 można przechowywać informacje o stanie krytycznym w oddzielnym obiekcie o nazwie State Control.To mitigate this, in ASP.NET version 2.0 you can store critical state information in a separate object, called control state. Nie ma to wpływ na obiekt stanu formantu, gdy stan widoku jest wyłączony przez dewelopera strony.The control state object is not affected when view state is disabled by a page developer. Przechowywanie informacji o stanie w obiekcie stan formantu wymaga, aby formant zastąpił LoadControlState SaveControlState metody i i że formant jest zarejestrowany do przechowywania informacji o stanie w stanie kontroli za każdym razem, gdy formant jest zainicjowany.Storing state information in the control state object requires that the control override the LoadControlState and SaveControlState methods and that the control be registered to store state information in control state every time the control is initialized. Aby można było zarejestrować formant do używania stanu kontroli, zastępując OnInit metodę i wywołując RegisterRequiresControlState metodę.You can register a control to use control state by overriding the OnInit method and calling the RegisterRequiresControlState method. Aby uzyskać więcej informacji na temat używania ViewState właściwości i stanu formantu podczas tworzenia formantów, zobacz Tworzenie niestandardowych kontrolek serwera ASP.NET.For more information about using the ViewState property and control state when developing controls, see Developing Custom ASP.NET Server Controls.

Aby zachować stan widoku na klientach, którzy nie mogą obsługiwać istniejących mechanizmów trwałości stanu widoku, można zwiększyć PageStatePersister klasę, aby wprowadzić własne metody stanu widoku, i można użyć kart strony do skonfigurowania aplikacji ASP.NET do korzystania z różnych mechanizmów trwałości stanu widoku w zależności od typu klienta, do którego jest obsługiwana strona.To maintain view state on clients that cannot support the existing view state persistence mechanisms, you can extend the PageStatePersister class to introduce your own view state persistence methods, and you can use page adapters to configure your ASP.NET application to use different view state persistence mechanisms based on the type of client to which a page is served. Klasy, które pochodzą z PageStatePersister klasy, muszą przesłaniać metodę abstrakcyjną w Save celu przechowywania stanu widoku i kontroli w nośniku trwałości i przesłaniać Load metodę w celu wyodrębnienia.Classes that derive from the PageStatePersister class must override the abstract Save method to store view state and control state in the persistence medium, and override the Load method to extract it. Jeśli zachodzi potrzeba serializacji stanu widoku i kontroli do ciągu, można użyć IStateFormatter obiektu, do którego uzyskuje się dostęp przy użyciu StateFormatter właściwości.If you need to serialize view state and control state to a string, you can use the IStateFormatter object that is accessed using the StateFormatter property. Efektywnie deserializacji i deserializacji informacje o stanie obiektu do ciągu zakodowanego algorytmem Base64.It efficiently serializes and deserializes object state information to a Base64-encoded string. Możesz również zastąpić właściwość, StateFormatter Aby dostarczyć własny mechanizm serializacji stanu obiektu.You can also override the StateFormatter property to supply your own object state serialization mechanism.

Konstruktory

PageStatePersister(Page)

Inicjuje nowe wystąpienie klasy PageStatePersister.Initializes a new instance of the PageStatePersister class.

Właściwości

ControlState

Pobiera lub ustawia obiekt reprezentujący dane, które kontrolki zawarte w bieżącym Page obiekcie używają do zachowywania żądań HTTP do serwera sieci Web.Gets or sets an object that represents the data that controls contained by the current Page object use to persist across HTTP requests to the Web server.

Page

Pobiera lub ustawia Page obiekt, dla którego jest tworzony mechanizm trwałości stanu widoku.Gets or sets the Page object that the view state persistence mechanism is created for.

StateFormatter

Pobiera IStateFormatter obiekt, który jest używany do serializacji i deserializacji informacji o stanie zawartych we ViewState ControlState właściwościach i podczas wywołań Save() metod i Load() .Gets an IStateFormatter object that is used to serialize and deserialize the state information contained in the ViewState and ControlState properties during calls to the Save() and Load() methods.

ViewState

Pobiera lub ustawia obiekt reprezentujący dane, które kontrolki zawarte w bieżącym Page obiekcie używają do zachowywania żądań HTTP do serwera sieci Web.Gets or sets an object that represents the data that controls contained by the current Page object use to persist across HTTP requests to the Web server.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
Load()

Przesłonięte przez klasy pochodne, aby deserializować i załadować utrwalone informacje o stanie, gdy Page obiekt inicjuje swoją hierarchię kontroli.Overridden by derived classes to deserialize and load persisted state information when a Page object initializes its control hierarchy.

MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
Save()

Zastąpione przez klasy pochodne, aby serializować utrwalone informacje o stanie, gdy Page obiekt jest zwolniony z pamięci.Overridden by derived classes to serialize persisted state information when a Page object is unloaded from memory.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Dotyczy

Zobacz też