PageStatePersister Класс

Определение

Предоставляет базовую функциональность для механизмов сохранения состояния представления ASP.NET.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
Наследование
PageStatePersister
Производный

Примеры

В следующем примере кода показано, как создать PageStatePersister объект, который сохраняет представление и состояние элемента управления на веб-сервере.The following code example demonstrates how to create a PageStatePersister object that saves view and control state on the Web server. В StreamPageStatePersister этом примере показано, как Load переопределить Save методы и для извлечения и сохранения сведений о состоянии представления.The StreamPageStatePersister demonstrates how to override the Load and Save methods to extract and save view state information. Поскольку механизмы сохранения состояния связаны с адаптивной визуализацией и возможностями клиента, MyPageAdapter класс предоставляется для StreamPageStatePersister активации приложения 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. Наконец, предоставляется файл возможностей браузера (Browser) для включения MyPageAdapter адаптера для определенного класса клиентов (в данном случае это веб-браузер по умолчанию).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

В следующем примере кода показано, как создать PageAdapter класс, возвращающий StreamPageStatePersisterэкземпляр, который используется для сохранения представления и состояния элемента управления для веб-страницы 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

Скомпилируйте эти два класса в сборку, которую можно использовать для запуска примера, используя следующую командную строку компилятора.Compile these two classes into an assembly that you can use to run a sample, using the following compiler command line. Убедитесь, что скомпилированная сборка находится в каталоге \bin под корнем приложения 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
'

Наконец, чтобы включить MyPageAdapter адаптер, необходимо создать каталог с именем Browsers под корнем приложения ASP.NET и включить файл. browser с информацией о конфигурации.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> Элемент в файле конфигурации указывает, что конфигурация переопределяет значения, указанные для браузера по умолчанию в файле конфигурации по умолчанию. browser.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. В этом примере MyPageAdapter используется для веб-страниц ASP.NET (где обычно не используется адаптер).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>  

Комментарии

HTTP-запросы и ответы по своей природе не имеют состояния.The HTTP requests and responses are inherently stateless. Чтобы сохранить сведения о состоянии между HTTP-запросами, страницы сервера ASP.NET Page могут хранить состояние.To maintain state information between HTTP requests, ASP.NET server pages can store Page state. Это состояние, называемое состоянием представления, состоит из параметров страницы и элементов управления и данных, которые делают страницу и элементы управления такими же, как если бы пользователь видел и взаимодействовал с последним циклическим обменом с сервером.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. Существует несколько механизмов хранения состояния представления между последовательными запросами к одной и той же странице.Several mechanisms exist to store view state between successive requests to the same page. Абстрактный PageStatePersister класс представляет базовый класс для этих механизмов хранения сведений о состоянии.The abstract PageStatePersister class represents the base class for these state information storage mechanisms.

Механизм сохраняемости состояния представления по умолчанию в ASP.NET заключается в поддержке сведений о состоянии в виде строки в кодировке Base64 в скрытом HTML-элементе (элемент с type атрибутом, "hidden"установленным в) на странице.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. Страница ASP.NET использует HiddenFieldPageStatePersister объект для выполнения этой работы, IStateFormatter используя экземпляр для сериализации и десериализации сведений о состоянии объекта.An ASP.NET page uses a HiddenFieldPageStatePersister object to perform this work, using an IStateFormatter instance to serialize and deserialize object state information. Кроме того, состояние представления для страниц можно сохранить в Session объекте на сервере SessionPageStatePersister с помощью класса для мобильных клиентов с ограниченной пропускной способностью и ресурсами.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. В некоторых случаях сохранение состояния просмотра можно отключить совсем.In some cases, you might disable view state persistence altogether. В результате это приведет к тому, что иногда страницы и элементы управления, зависящие от сохраняемости состояния, работают неправильно.If you do this, the result is that sometimes pages and controls that rely on state persistence do not behave correctly. Дополнительные сведения об управлении состоянием страницы и состоянии представления см. в разделе ASP.NET State Management Overview.For more information about page state management and view state, see ASP.NET State Management Overview.

При написании элементов управления можно хранить сведения о состоянии для элементов управления в ViewState словаре, который StateBag является объектом.If you are writing controls, you can store state information for the controls in the ViewState dictionary, which is a StateBag object. Разработчик может извлечь состояние элемента управления с помощью ControlState свойства.A developer would retrieve the control state through the ControlState property. Вы назначаете ViewState свойству ключи и значения, Page и объект сериализует сведения о состоянии между запросами.You assign keys and values to the ViewState property, and the Page object serializes the state information between requests. Для выполнения пользовательской обработки состояния в элементе управления Переопределите LoadViewState методы и. SaveViewStateTo perform custom state handling in your control, override the LoadViewState and SaveViewState methods. Сведения о состоянии, хранящиеся в этом словаре, теряются, если состояние представления отключено разработчиком страницы.Any state information that is stored in this dictionary is lost when view state is disabled by a page developer. Чтобы устранить эту проблемы, в ASP.NET версии 2,0 можно хранить критически важные сведения о состоянии в отдельном объекте, который называется состоянием элемента управления.To mitigate this, in ASP.NET version 2.0 you can store critical state information in a separate object, called control state. На объект состояния элемента управления не влияет состояние представления, отключенное разработчиком страницы.The control state object is not affected when view state is disabled by a page developer. Для хранения сведений о состоянии в объекте состояния элемента управления требуется, чтобы элемент LoadControlState управления SaveControlState переопределял методы и, а также что элемент управления должен быть зарегистрирован для хранения сведений о состоянии в состоянии элемента управления каждый раз при инициализации элемента управления.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. Можно зарегистрировать элемент управления для использования состояния элемента управления, переопределив OnInit метод и RegisterRequiresControlState вызвав метод.You can register a control to use control state by overriding the OnInit method and calling the RegisterRequiresControlState method. Дополнительные сведения об использовании ViewState свойства и состояния элемента управления при разработке элементов управления см. в разделе Разработка пользовательских серверных элементов управления ASP.NET.For more information about using the ViewState property and control state when developing controls, see Developing Custom ASP.NET Server Controls.

Чтобы поддерживать состояние представления на клиентах, которые не поддерживают существующие механизмы сохранения состояния представления, можно расширить PageStatePersister класс, чтобы ввести собственные методы сохранения состояния представления, а также использовать адаптеры страниц для настройки приложения ASP.NET. использование различных механизмов сохранения состояния представления в зависимости от типа клиента, на котором обслуживается страница.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. Классы, производные от PageStatePersister класса, должны переопределять абстрактный Save метод для хранения состояния представления и состояния элемента управления в среднем хранилище, а также Load переопределять метод, чтобы извлекать его.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. Если необходимо сериализовать состояние представления и состояние элемента управления в строку, можно использовать IStateFormatter объект, доступ к которому осуществляется StateFormatter с помощью свойства.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. Она эффективно сериализует и десериализует сведения о состоянии объекта в строку в кодировке Base64.It efficiently serializes and deserializes object state information to a Base64-encoded string. Можно также переопределить StateFormatter свойство, чтобы предоставить собственный механизм сериализации состояния объекта.You can also override the StateFormatter property to supply your own object state serialization mechanism.

Конструкторы

PageStatePersister(Page)

Инициализирует новый экземпляр класса PageStatePersister.Initializes a new instance of the PageStatePersister class.

Свойства

ControlState

Возвращает или задает объект, представляющий данные, которые элементы управления, содержащиеся в текущем объекте Page, используют для сохранения в HTTP-запросах к веб-серверу.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

Возвращает или задает объект Page, для которого создается механизм сохранения состояния представления.Gets or sets the Page object that the view state persistence mechanism is created for.

StateFormatter

Возвращает объект IStateFormatter, используемый для сериализации и десериализации данных о состоянии, содержащихся в свойствах ViewState и ControlState во время вызова методов Save() и 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

Возвращает или задает объект, представляющий данные, которые элементы управления, содержащиеся в текущем объекте Page, используют для сохранения в HTTP-запросах к веб-серверу.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.

Методы

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
Load()

Переопределение производными классами для десериализации и загрузки сохраненной информации о состоянии при инициализации объектом Page собственной иерархии элементов управления.Overridden by derived classes to deserialize and load persisted state information when a Page object initializes its control hierarchy.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
Save()

Переопределение производными классами для сериализации сохраненных данных о состоянии при выгрузке из памяти объекта Page.Overridden by derived classes to serialize persisted state information when a Page object is unloaded from memory.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к

Дополнительно