StateItem クラス

ビューステート情報が複数の Web 要求間で永続化されている場合に、StateBag クラスに保存されている項目を表します。このクラスは継承できません。

名前空間: System.Web.UI
アセンブリ: System.Web (system.web.dll 内)

構文

'宣言
Public NotInheritable Class StateItem
'使用
Dim instance As StateItem
public sealed class StateItem
public ref class StateItem sealed
public final class StateItem
public final class StateItem
適用できません。

解説

ビューステートはページまたは ASP.NET サーバー コントロールのプロパティ値の累積であり、要求側のブラウザの非表示フィールドに送信されます。

Item プロパティまたは Add メソッドを使用して、StateItem オブジェクトを ASP.NET サーバー コントロールの StateBag オブジェクトに明示的に追加できます。その後 StateBag は、格納しているすべての項目への変更を追跡します。StateItem オブジェクトに対する変更は、IsDirty プロパティに反映されます。これらの変更は、サーバー コントロール処理のビューステート保存フェーズ中に、コントロールがページに表示される前に SaveViewState メソッドへの呼び出しによって保存されます。詳細については、「ASP.NET Web サーバー コントロール」を参照してください。

使用例

StateItem クラスの Value プロパティと 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.
Imports System
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 '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 

    ' 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 'New

        ' 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 'LoadViewState
        ' 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 'TrackViewState

        ' 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 'SetMessage


        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 'Render
    End Class 'MyControl
End Namespace 'StateBagSampleVB
// 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());
        }
    }
}
package StateBagSample;
// 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.
import System.*;
import System.Web.UI.*;
import System.Collections.*;
// 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

// 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.
public class MyControl extends Control
{
    private MyItem myItem;

    public MyControl()
    {
        myItem = new MyItem("Hello World!");
    } //MyControl

    // Override the LoadViewState method of the Control class.
    protected void LoadViewState(Object savedState)
    {
        if (savedState != null) {
            Object myState[] = (Object[])savedState;
            if (myState.get_Item(0) != null) {
                super.LoadViewState(myState.get_Item(0));
            }
            if (myState.get_Item(1) != null) {
                ((IStateManager)myItem).LoadViewState(myState.get_Item(1));
            }
        }
    } //LoadViewState

    // Override the TrackViewState method of the Control class
    // to call the version of this method that was 
    // implemented in the MyItem class.
    protected void TrackViewState()
    {
        super.TrackViewState();
        if (myItem != null) {
            ((IStateManager)myItem).TrackViewState();
        }
    } //TrackViewState

    // Override the SaveViewState method of the Control class to
    // call the version of this method that was implemented by
    // the MyItem class.
    protected Object SaveViewState()
    {
        Object baseState = super.SaveViewState();
        Object itemState = (myItem != null) ? 
            ((IStateManager)myItem).SaveViewState() : null;
        Object myState[] = new Object[2];
        myState.set_Item(0, baseState);
        myState.set_Item(1, itemState);
        return myState;
    } //SaveViewState

    public void SetMessage(String mesg)
    {
        myItem.set_Message(mesg);
    } //SetMessage

    public String GetMessage()
    {
        return myItem.get_Message();
    } //GetMessage

    // Display the contents of Message and ViewState properties. 
    protected void Render(HtmlTextWriter output)
    {
        // Track changes to  view state before rendering.
        TrackViewState();
        output.Write("Message: " + myItem.get_Message());
        output.Write("<br>");
        output.Write("<br>Enumerating the view state of the custom control<br>");
        output.Write(myItem.EnumerateViewState());
    } //Render
} //MyControl

継承階層

System.Object
  System.Web.UI.StateItem

スレッド セーフ

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。

プラットフォーム

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

参照

関連項目

StateItem メンバ
System.Web.UI 名前空間
StateBag
SaveViewState

その他の技術情報

ASP.NET Web サーバー コントロール
ASP.NET の状態管理