IStateManager インターフェイス
アセンブリ: System.Web (system.web.dll 内)


サーバー コントロールのビューステートは、コントロールのプロパティの累積値によって表されます。このインターフェイスには、サーバー コントロールのビューステートの値を保存したり読み込むメソッドや、コントロールに対し、そのビューステートの変化を追跡するように指示するメソッドがあります。
StateBag クラスからは継承できないため、ASP.NET アプリケーションでサーバー コントロールのビューステートを管理する方法をカスタマイズするには、このインターフェイスを実装するクラスを作成する必要があります。

IStateManager インターフェイスの実装方法を次のコード例に示します。この例には、IsTrackingViewState プロパティ、および LoadViewState、SaveViewState、TrackViewState の各メソッドの実装が含まれます。
' 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 'New ' 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 'LoadViewState ' 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 'IStateManager.TrackViewState ' 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 'MyItem
// 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; } }
// Create a class that implements IStateManager so that // it can manage its own view state. public class MyItem implements 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); } //MyItem // 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. /** @property */ public String get_Message() { return (String)(_viewState.get_Item("message")); } //get_Message /** @property */ public void set_Message(String value) { _message = value; _viewState.SetItemDirty("message", true); } //set_Message // Implement the LoadViewState method. If the saved view state // exists, the view-state value is loaded to the MyItem control. public void LoadViewState(Object savedState) { _message = (String)(_viewState.get_Item("message")); if (savedState != null) { ((IStateManager)_viewState).LoadViewState(savedState); } } //LoadViewState // 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. public Object 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(); } //SaveViewState // Implement the TrackViewState method for this class by // calling the TrackViewState method of the class's private // _viewState property. public void TrackViewState() { ((IStateManager)_viewState).TrackViewState(); } //TrackViewState // Implement the IsTrackingViewState method for this class // by calling the IsTrackingViewState method of the class's // private _viewState property. /** @property */ public boolean get_IsTrackingViewState() { return ((IStateManager)_viewState).get_IsTrackingViewState(); } // get_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 = ""; StateItem myStateItem; IDictionaryEnumerator myDictionaryEnumerator = _viewState.GetEnumerator(); while (myDictionaryEnumerator.MoveNext()) { keyName = (String)myDictionaryEnumerator.get_Key(); myStateItem = (StateItem) myDictionaryEnumerator.get_Value(); keyValue = (String)myStateItem.get_Value(); result = result + "<br>ViewState[" + keyName + "] = " + keyValue; } return result; } //EnumerateViewState } //MyItem

Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


IStateManager プロパティ
IStateManager メソッド

名前 | 説明 | |
---|---|---|
![]() | LoadViewState | クラスによって実装された場合は、サーバー コントロールに、そのコントロールについて前回保存されたビューステートを読み込みます。 |
![]() | SaveViewState | クラスによって実装された場合は、サーバー コントロールのビューステートの変化を Object に保存します。 |
![]() | TrackViewState | クラスによって実装された場合は、サーバー コントロールに対し、そのビューステートの変化を追跡するように指示します。 |

IStateManager メンバ
サーバー コントロールのビューステートを管理できるようにするために、すべてのクラスで実装する必要があるプロパティとメソッドを定義します。
IStateManager データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | LoadViewState | クラスによって実装された場合は、サーバー コントロールに、そのコントロールについて前回保存されたビューステートを読み込みます。 |
![]() | SaveViewState | クラスによって実装された場合は、サーバー コントロールのビューステートの変化を Object に保存します。 |
![]() | TrackViewState | クラスによって実装された場合は、サーバー コントロールに対し、そのビューステートの変化を追跡するように指示します。 |

- IStateManagerのページへのリンク