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 и включить файл браузера с сведениями о конфигурации. Элемент <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) |