Cette documentation est archivée et n’est pas conservée.

StateItem, classe

Mise à jour : novembre 2007

Représente un élément qui est enregistré dans la classe StateBag lorsque les informations relatives à l'état d'affichage sont rendues persistantes entre les demandes Web. Cette classe ne peut pas être héritée.

Espace de noms :  System.Web.UI
Assembly :  System.Web (dans System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public sealed class StateItem
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public final class StateItem
public final class StateItem

L'état d'affichage est l'accumulation des valeurs de propriété d'une page ou d'un contrôle serveur ASP.NET et est envoyé au navigateur demandeur dans un champ masqué.

Vous pouvez explicitement ajouter les objets StateItem à un objet ASP.NET StateBag d'un contrôle serveur en utilisant la propriété Item ou la méthode Add. StateBag assure ensuite le suivi des modifications apportées à tous les éléments qu'il stocke. Toute modification d'un objet StateItem est répercutée dans sa propriété IsDirty. Ces changements sont enregistrés par un appel à la méthode SaveViewState durant la phase d'enregistrement de l'état d'affichage du traitement du contrôle serveur, et juste avant que ce dernier ne soit rendu sur la page.

L'exemple de code suivant utilise les propriétés Value et IsDirty de la classe StateItem pour enregistrer l'état d'une simple classe de contrôle serveur ASP.NET personnalisée, StateBagSample. Lorsque la page est publiée sur le serveur, la propriété IsDirty vérifie si l'élément a été modifié. Les valeurs d'état sont affichées via l'accès à la propriété 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());
        }
    }
}


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

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0, 1.1, 1.0
Afficher: