IStateManager インターフェイス
サーバー コントロールのビューステートを管理できるようにするために、すべてのクラスで実装する必要があるプロパティとメソッドを定義します。
名前空間: System.Web.UI
アセンブリ: System.Web (system.web.dll 内)
構文
'宣言
Public Interface IStateManager
'使用
Dim instance As IStateManager
public interface IStateManager
public interface class IStateManager
public interface IStateManager
public interface IStateManager
適用できません。
解説
サーバー コントロールのビューステートは、コントロールのプロパティの累積値によって表されます。このインターフェイスには、サーバー コントロールのビューステートの値を保存したり読み込むメソッドや、コントロールに対し、そのビューステートの変化を追跡するように指示するメソッドがあります。
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 Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition
Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。
バージョン情報
.NET Framework
サポート対象 : 3.0,2.0,1.1,1.0
参照
関連項目
IStateManager メンバ
System.Web.UI 名前空間
StateBag
StateItem