IStateManager Interface


The .NET API Reference documentation has a new home. Visit the .NET API Browser on to see the new experience.

Defines the properties and methods any class must implement to support view state management for a server control.

Namespace:   System.Web.UI
Assembly:  System.Web (in System.Web.dll)

public interface IStateManager


When implemented by a class, gets a value indicating whether a server control is tracking its view state changes.


When implemented by a class, loads the server control's previously saved view state to the control.


When implemented by a class, saves the changes to a server control's view state to an Object.


When implemented by a class, instructs the server control to track changes to its view state.

A server control's view state comprises the cumulative values of the control's properties. This interface includes methods that save and load a server control's view state values, as well as a method that instructs the control to track any changes to its view state.

To customize the way your ASP.NET application manages server control view state, you must create a class that implements this interface because you cannot inherit from the StateBag class.

The following code example shows a class that implements the IStateManager interface. It includes implementations of the IsTrackingViewState property and the LoadViewState, SaveViewState, and TrackViewState methods.

// Create a class that implements IStateManager so that
// it can manage its own view state.   
   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
            return (string)_viewstate["message"];
            _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)

    // 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"))
            // 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()

    // Implement the IsTrackingViewState method for this class 
    // by calling the IsTrackingViewState method of the class's
    // private _viewstate property. 
    bool IStateManager.IsTrackingViewState
            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;

.NET Framework
Available since 1.1
Return to top