StateItem Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет элемент, сохраняемый в классе StateBag, когда сведения о режиме отображения остаются неизменными между веб-запросами. Этот класс не наследуется.
public ref class StateItem sealed
public sealed class StateItem
type StateItem = class
Public NotInheritable Class StateItem
- Наследование
-
StateItem
Примеры
В следующем примере кода используются Value свойства StateItem и IsDirty класса для сохранения состояния простого пользовательского ASP.NET серверного класса StateBagSample
управления . После публикации страницы на сервере IsDirty свойство проверяет, был ли изменен элемент. Значения состояния отображаются путем доступа к свойству Value .
// Create a namespace that contains a class, MyItem,
// that implements the IStateManager interface and
// another, MyControl, that overrides its own view-state
// management methods to use those of MyItem.
using System;
using System.Web;
using System.Web.UI;
using System.Collections;
using System.Security.Permissions;
namespace StateBagSample
{
// Create a class that implements IStateManager so that
// it can manage its own view state.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class MyItem : IStateManager
{
private string _message;
// The StateBag object that allows you to save
// and restore view-state information.
private StateBag _viewstate;
// The constructor for the MyItem class.
public MyItem(string mesg)
{
_message = mesg;
_viewstate = new StateBag();
_viewstate.Add("message", _message);
}
// Create a Message property that reads from and writes
// to view state. If the set accessor writes the message
// value to view state, the StateBag.SetItemDirty method
// is called, telling view state that the item has changed.
public string Message
{
get
{
return (string)_viewstate["message"];
}
set
{
_message = value;
_viewstate.SetItemDirty("message", true);
}
}
// Implement the LoadViewState method. If the saved view state
// exists, the view-state value is loaded to the MyItem control.
void IStateManager.LoadViewState(object savedState)
{
_message = (string)_viewstate["message"];
if (savedState != null)
((IStateManager)_viewstate).LoadViewState(savedState);
}
// Implement the SaveViewState method. If the StateBag
// that stores the MyItem class's view state contains
// a value for the message property and if the value
// has changed since the TrackViewState method was last
// called, all view state for this class is deleted,
// using the StateBag.Clear method,and the new value is added.
object IStateManager.SaveViewState()
{
// Check whether the message property exists in
// the ViewState property, and if it does, check
// whether it has changed since the most recent
// TrackViewState method call.
if (!((IDictionary)_viewstate).Contains("message") || _viewstate.IsItemDirty("message"))
{
_viewstate.Clear();
// Add the _message property to the StateBag.
_viewstate.Add("message", _message);
}
return ((IStateManager)_viewstate).SaveViewState();
}
// Implement the TrackViewState method for this class by
// calling the TrackViewState method of the class's private
// _viewstate property.
void IStateManager.TrackViewState()
{
((IStateManager)_viewstate).TrackViewState();
}
// Implement the IsTrackingViewState method for this class
// by calling the IsTrackingViewState method of the class's
// private _viewstate property.
bool IStateManager.IsTrackingViewState
{
get
{
return ((IStateManager)_viewstate).IsTrackingViewState;
}
}
// Create a function that iterates through the view-state
// values stored for this class and returns the
// results as a string.
public string EnumerateViewState()
{
string keyName, keyValue;
string result = String.Empty;
StateItem myStateItem;
IDictionaryEnumerator myDictionaryEnumerator = _viewstate.GetEnumerator();
while (myDictionaryEnumerator.MoveNext())
{
keyName = (string)myDictionaryEnumerator.Key;
myStateItem = (StateItem)myDictionaryEnumerator.Value;
keyValue = (string)myStateItem.Value;
result = result + "<br>ViewState[" + keyName + "] = " + keyValue;
}
return result;
}
}
// This class contains an instance of the MyItem class as
// private member. It overrides the state management methods
// of the Control class, since it has to invoke state
// management methods of MyItem whenever its own
// view state is being saved, loaded, or tracked.
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class MyControl : Control
{
private MyItem myItem;
public MyControl()
: base()
{
myItem = new MyItem("Hello World!");
}
// Override the LoadViewState method of the Control class.
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
object[] myState = (object[])savedState;
if (myState[0] != null)
base.LoadViewState(myState[0]);
if (myState[1] != null)
((IStateManager)myItem).LoadViewState(myState[1]);
}
}
// Override the TrackViewState method of the Control class
// to call the version of this method that was
// implemented in the MyItem class.
protected override void TrackViewState()
{
base.TrackViewState();
if (myItem != null)
((IStateManager)myItem).TrackViewState();
}
// Override the SaveViewState method of the Control class to
// call the version of this method that was implemented by
// the MyItem class.
protected override object SaveViewState()
{
object baseState = base.SaveViewState();
object itemState = (myItem != null) ? ((IStateManager)myItem).SaveViewState() : null;
object[] myState = new object[2];
myState[0] = baseState;
myState[1] = itemState;
return myState;
}
public void SetMessage(string mesg)
{
myItem.Message = mesg;
}
public string GetMessage()
{
return myItem.Message;
}
// Display the contents of Message and ViewState properties.
protected override void Render(HtmlTextWriter output)
{
// Track changes to view state before rendering.
TrackViewState();
output.Write("Message: " + myItem.Message);
output.Write("<br>");
output.Write("<br>Enumerating the view state of the custom control<br>");
output.Write(myItem.EnumerateViewState());
}
}
}
' Create a namespace that contains a class, MyItem,
' that implements the IStateManager interface and
' another, MyControl, that overrides its own view-state
' management methods to use those of MyItem.
Imports System.Web
Imports System.Web.UI
Imports System.Collections
Imports System.Security.Permissions
Namespace StateBagSampleVB
' Create a class that implements IStateManager so that
' it can manage its own view state.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class MyItem
Implements IStateManager
Private _message As String
' The StateBag object that allows you to save
' and restore view-state information.
Private _viewstate As StateBag
' The constructor for the MyItem class.
Public Sub New(ByVal mesg As String)
_message = mesg
_viewstate = New StateBag()
_viewstate.Add("message", _message)
End Sub
' Create a Message property that reads from and writes
' to view state. If the set accessor writes the message
' value to view state, the StateBag.SetItemDirty method
' is called, telling view state that the item has changed.
Public Property Message() As String
Get
Return CStr(_viewstate("message"))
End Get
Set(ByVal value As String)
_message = value
_viewstate.SetItemDirty("message", True)
End Set
End Property
' Implement the LoadViewState method. If the saved view state
' exists, the view-state value is loaded to the MyItem
' control.
Sub LoadViewState(ByVal savedState As Object) Implements IStateManager.LoadViewState
_message = CStr(_viewstate("message"))
If Not (savedState Is Nothing) Then
CType(_viewstate, IStateManager).LoadViewState(savedState)
End If
End Sub
' Implement the SaveViewState method. If the StateBag
' that stores the MyItem class's view state contains
' a value for the message property and if the value
' has changed since the TrackViewState method was last
' called, all view state for this class is deleted,
' using the StateBag.Clear method,and the new value is added.
Function SaveViewState() As Object Implements IStateManager.SaveViewState
' Check whether the message property exists in
' the ViewState property, and if it does, check
' whether it has changed since the most recent
' TrackViewState method call.
If Not CType(_viewstate, IDictionary).Contains("message") OrElse _viewstate.IsItemDirty("message") Then
_viewstate.Clear()
' Add the _message property to the StateBag.
_viewstate.Add("message", _message)
End If
Return CType(_viewstate, IStateManager).SaveViewState()
End Function 'IStateManager.SaveViewState
' Implement the TrackViewState method for this class by
' calling the TrackViewState method of the class's private
' _viewstate property.
Sub TrackViewState() Implements IStateManager.TrackViewState
CType(_viewstate, IStateManager).TrackViewState()
End Sub
' Implement the IsTrackingViewState method for this class
' by calling the IsTrackingViewState method of the class's
' private _viewstate property.
ReadOnly Property IsTrackingViewState() As Boolean Implements IStateManager.IsTrackingViewState
Get
Return CType(_viewstate, IStateManager).IsTrackingViewState
End Get
End Property
' Create a function that iterates through the view-state
' values stored for this class and returns the
' results as a string.
Public Function EnumerateViewState() As String
Dim keyName, keyValue As String
Dim result As String = [String].Empty
Dim myStateItem As StateItem
Dim myDictionaryEnumerator As IDictionaryEnumerator = _viewstate.GetEnumerator()
While myDictionaryEnumerator.MoveNext()
keyName = CStr(myDictionaryEnumerator.Key)
myStateItem = CType(myDictionaryEnumerator.Value, StateItem)
keyValue = CStr(myStateItem.Value)
result = result + "<br>ViewState[" + keyName + "] = " + keyValue
End While
Return result
End Function 'EnumerateViewState
End Class
' This class contains an instance of the MyItem class as
' private member. It overrides the state management methods
' of the Control class, since it has to invoke state
' management methods of MyItem whenever its own
' view state is being saved, loaded, or tracked.
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public NotInheritable Class MyControl
Inherits Control
Private myItem As MyItem
Public Sub New()
myItem = New MyItem("Hello World!")
End Sub
' Override the LoadViewState method of the Control class.
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
If Not (savedState Is Nothing) Then
Dim myState As Object() = CType(savedState, Object())
If Not (myState(0) Is Nothing) Then
MyBase.LoadViewState(myState(0))
End If
If Not (myState(1) Is Nothing) Then
CType(myItem, IStateManager).LoadViewState(myState(1))
End If
End If
End Sub
' Override the TrackViewState method of the Control class
' to call the version of this method that was
' implemented in the MyItem class.
Protected Overrides Sub TrackViewState()
MyBase.TrackViewState()
If Not (myItem Is Nothing) Then
CType(myItem, IStateManager).TrackViewState()
End If
End Sub
' Override the SaveViewState method of the Control class to
' call the version of this method that was implemented by
' the MyItem class.
Protected Overrides Function SaveViewState() As Object
Dim baseState As Object = MyBase.SaveViewState()
Dim itemState As Object
If Not (myItem Is Nothing) Then
itemState = CType(myItem, IStateManager).SaveViewState()
Else
itemState = Nothing
End If
Dim myState(1) As Object
myState(0) = baseState
myState(1) = itemState
Return myState
End Function 'SaveViewState
Public Sub SetMessage(ByVal mesg As String)
myItem.Message = mesg
End Sub
Public Function GetMessage() As String
Return myItem.Message
End Function 'GetMessage
' Display the contents of Message and ViewState properties.
Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
' Track changes to view state before rendering.
TrackViewState()
output.Write(("Message: " + myItem.Message))
output.Write("<br>")
output.Write("<br>Enumerating the view state of the custom control<br>")
output.Write(myItem.EnumerateViewState())
End Sub
End Class
End Namespace 'StateBagSampleVB
Комментарии
Состояние просмотра — это накопление значений свойств страницы или ASP.NET серверного элемента управления и отправляется в запрашивающий браузер в скрытом поле.
Вы можете явно добавить StateItem объекты в объект серверного элемента управления StateBag ASP.NET с помощью Item[] свойства или Add метода . Затем StateBag отслеживает изменения во всех элементах, которые он хранит. Все изменения StateItem объекта отражаются в его IsDirty свойстве . Эти изменения сохраняются вызовом SaveViewState метода на этапе сохранения состояния представления серверного элемента управления непосредственно перед отрисовкой элемента управления на странице. Дополнительные сведения см . в разделе ASP.NET веб-серверных элементов управления.
Свойства
IsDirty |
Возвращает или задает значение, указывающее, был ли изменен объект StateItem. |
Value |
Возвращает или задает значение объекта StateItem, хранящегося в объекте StateBag. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |