Export (0) Print
Expand All

IStateManager Interface

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

The IStateManager type exposes the following members.

  NameDescription
Public propertyIsTrackingViewStateWhen implemented by a class, gets a value indicating whether a server control is tracking its view state changes.
Top

  NameDescription
Public methodLoadViewStateWhen implemented by a class, loads the server control's previously saved view state to the control.
Public methodSaveViewStateWhen implemented by a class, saves the changes to a server control's view state to an Object.
Public methodTrackViewStateWhen implemented by a class, instructs the server control to track changes to its view state.
Top

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.   
[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;
    }
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1
Show:
© 2015 Microsoft