Sdílet prostřednictvím


StateItem Třída

Definice

Představuje položku, která je uložena StateBag ve třídě při zobrazení informací o stavu je uložena mezi webovými požadavky. Tato třída se nemůže dědit.

public ref class StateItem sealed
public sealed class StateItem
type StateItem = class
Public NotInheritable Class StateItem
Dědičnost
StateItem

Příklady

Následující příklad kódu používá Value vlastnosti StateItem a IsDirty třídy k uložení stavu jednoduché vlastní ASP.NET serverové třídy StateBagSampleovládacího prvku . Když se stránka publikuje na server, vlastnost zkontroluje IsDirty , jestli byla položka změněna. Hodnoty stavu se zobrazí při přístupu k Value vlastnosti .

// 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

Poznámky

Stav zobrazení je nahromadění hodnot vlastností ovládacího prvku stránky nebo ASP.NET serveru a odesílá se do prohlížeče, který žádost požaduje, ve skrytém poli.

Objekty můžete explicitně přidat StateItem do objektu ASP.NET serverového StateBag ovládacího prvku pomocí Item[] vlastnosti nebo Add metody . Pak StateBag sleduje změny všech položek, které ukládá. Všechny změny objektu StateItem se projeví v jeho IsDirty vlastnosti. Tyto změny jsou uloženy voláním SaveViewState metody během fáze ukládání zobrazení stavu zpracování serverového ovládacího prvku, těsně před vykreslením ovládacího prvku na stránku. Další informace najdete v tématu ASP.NET ovládací prvky webového serveru.

Vlastnosti

IsDirty

Získá nebo nastaví hodnotu označující, zda StateItem byl objekt změněn.

Value

Získá nebo nastaví hodnotu objektu StateItem , který je uložen v objektu StateBag .

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také