StateItem クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ビューステート情報が複数の Web 要求間で永続化されている場合に、StateBag クラスに保存されている項目を表します。 このクラスは継承できません。
public ref class StateItem sealed
public sealed class StateItem
type StateItem = class
Public NotInheritable Class StateItem
- 継承
-
StateItem
例
次のコード例では、 Value クラスの プロパティと IsDirty プロパティを StateItem 使用して、単純なカスタム 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 サーバー コントロールのプロパティ値の蓄積であり、非表示フィールド内の要求側のブラウザーに送信されます。
プロパティまたは メソッドを使用して、ASP.NET サーバー コントロールの StateBag オブジェクトにオブジェクトを明示的にAddItem[]追加StateItemできます。 次に、 は StateBag 、格納されているすべての項目に対する変更を追跡します。 オブジェクトに対する StateItem 変更は、その IsDirty プロパティに反映されます。 これらの変更は、コントロールがページに SaveViewState レンダリングされる直前に、サーバー コントロール処理のビューステートの保存フェーズ中に メソッドの呼び出しによって保存されます。 詳細については、「 ASP.NET Web サーバー コントロール」を参照してください。
プロパティ
IsDirty |
StateItem オブジェクトが変更されたかどうかを示す値を取得または設定します。 |
Value |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
こちらもご覧ください
.NET