PageStatePersister Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет базовую функциональность для механизмов сохранения состояния представления ASP.NET.
public ref class PageStatePersister abstract
public abstract class PageStatePersister
type PageStatePersister = class
Public MustInherit Class PageStatePersister
- Наследование
-
PageStatePersister
- Производный
Примеры
В следующем примере кода показано, как создать PageStatePersister объект , сохраняющий состояние представления и управления на веб-сервере. Демонстрирует StreamPageStatePersister
, как переопределить Load методы и для Save извлечения и сохранения сведений о состоянии представления. Поскольку механизмы сохраняемости состояния связаны с адаптивной отрисовкой и возможностями клиента, MyPageAdapter
класс предоставляется для активации StreamPageStatePersister
для ASP.NET приложения. Наконец, предоставляется файл возможностей браузера (.browser) для включения адаптера MyPageAdapter
для определенного класса клиентов (в данном случае это веб-браузер по умолчанию).
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.
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
Скомпилируйте эти два класса в сборку, которую можно использовать для запуска примера с помощью следующей командной строки компилятора. Убедитесь, что скомпилированная сборка находится в каталоге \Bin под корнем приложения 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
'
Наконец, чтобы включить MyPageAdapter
адаптер, необходимо создать каталог с именем Browsers под корнем приложения ASP.NET и включить в него файл .browser со сведениями о конфигурации. Элемент <refid>
в файле конфигурации указывает, что конфигурация переопределяет значения, указанные для браузера по умолчанию в файле конфигурации Default.browser. В этом примере MyPageAdapter
используется для ASP.NET веб-страниц (где обычно адаптер не используется).
<browsers>
<browser refid="Default" >
<controlAdapters>
<adapter
controlType="System.Web.UI.Page"
adapterType="Samples.AspNet.CS.MyPageAdapter" />
</controlAdapters>
</browser>
</browsers>
Комментарии
HTTP-запросы и ответы по своей сути являются без отслеживания состояния. Для сохранения сведений о состоянии между HTTP-запросами ASP.NET страницы сервера могут хранить Page состояние. Это состояние, называемое состоянием представления, состоит из параметров страницы и элементов управления и данных, которые делают страницу и элементы управления выглядят так, как будто они совпадают с теми, которые пользователь видел и с которым взаимодействовал при последнем круговом пути к серверу. Существует несколько механизмов для хранения состояния представления между последовательными запросами на одну и ту же страницу. Абстрактный PageStatePersister класс представляет базовый класс для этих механизмов хранения сведений о состоянии.
Механизм сохранения состояния представления по умолчанию в ASP.NET заключается в сохранении сведений о состоянии в виде строки в кодировке Base64 в скрытом ЭЛЕМЕНТе HTML (элементе с type
атрибутом , для параметра задано значение "hidden"
) на странице. Страница ASP.NET использует HiddenFieldPageStatePersister объект для выполнения этой работы, используя IStateFormatter экземпляр для сериализации и десериализации сведений о состоянии объекта. Кроме того, можно сохранить состояние просмотра страниц в объекте Session на сервере SessionPageStatePersister с помощью класса для мобильных клиентов с ограниченной пропускной способностью и ресурсами. В некоторых случаях можно полностью отключить сохранение состояния просмотра. В этом случае иногда страницы и элементы управления, зависящие от сохраняемости состояния, работают неправильно. Дополнительные сведения об управлении состоянием страниц и состоянии просмотра см. в статье Общие сведения об управлении состоянием ASP.NET.
При написании элементов управления можно хранить сведения о состоянии элементов управления в словаре ViewState , который является StateBag объектом . Разработчик получает состояние элемента управления с помощью ControlState свойства . Вы назначаете ключи и значения свойству ViewState , а Page объект сериализует сведения о состоянии между запросами. Чтобы выполнить пользовательскую обработку состояния в элементе управления , переопределите LoadViewState методы и SaveViewState . Все сведения о состоянии, хранящиеся в этом словаре, теряются при отключении состояния просмотра разработчиком страницы. Чтобы устранить эту проблему, в ASP.NET версии 2.0 можно хранить сведения о критическом состоянии в отдельном объекте, называемом состоянием управления. Объект состояния элемента управления не затрагивается, если разработчик страницы отключил состояние просмотра. Для хранения сведений о состоянии в объекте состояния элемента управления требуется, чтобы элемент управления переопределил LoadControlState методы и , SaveControlState а элемент управления регистрировался для хранения сведений о состоянии элемента управления при каждой инициализации элемента управления. Вы можете зарегистрировать элемент управления для использования состояния элемента управления, переопределив OnInit метод и вызвав RegisterRequiresControlState метод . Дополнительные сведения об использовании ViewState свойства и состояния элемента управления при разработке элементов управления см. в разделе Разработка пользовательских серверных элементов управления ASP.NET.
Для поддержания состояния представления на клиентах, которые не поддерживают существующие механизмы сохраняемости состояния представления, можно расширить PageStatePersister класс, чтобы ввести собственные методы сохраняемости состояния представления, а также использовать адаптеры страниц для настройки приложения ASP.NET для использования различных механизмов сохраняемости состояния представления в зависимости от типа клиента, которому обслуживается страница. Классы, производные PageStatePersister от класса , должны переопределить абстрактный Save метод для сохранения состояния представления и состояния элемента управления в среде сохраняемости, а также переопределить Load метод для его извлечения. Если необходимо сериализовать состояние представления и состояние элемента управления в строку, можно использовать IStateFormatter объект, к которому осуществляется доступ с помощью StateFormatter свойства . Он эффективно сериализует и десериализует сведения о состоянии объекта в строку в кодировке Base64. Вы также можете переопределить StateFormatter свойство , чтобы предоставить собственный механизм сериализации состояния объекта.
Конструкторы
PageStatePersister(Page) |
Инициализирует новый экземпляр класса PageStatePersister. |
Свойства
ControlState |
Возвращает или задает объект, представляющий данные, которые элементы управления, содержащиеся в текущем объекте Page, используют для сохранения в HTTP-запросах к веб-серверу. |
Page |
Возвращает или задает объект Page, для которого создается механизм сохранения состояния представления. |
StateFormatter |
Возвращает объект IStateFormatter, используемый для сериализации и десериализации данных о состоянии, содержащихся в свойствах ViewState и ControlState во время вызова методов Save() и Load(). |
ViewState |
Возвращает или задает объект, представляющий данные, которые элементы управления, содержащиеся в текущем объекте Page, используют для сохранения в HTTP-запросах к веб-серверу. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
Load() |
Переопределение производными классами для десериализации и загрузки сохраненной информации о состоянии при инициализации объектом Page собственной иерархии элементов управления. |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Save() |
Переопределение производными классами для сериализации сохраненных данных о состоянии при выгрузке из памяти объекта Page. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |