Redigera

Dela via


IStateManager Interface

Definition

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

public interface class IStateManager
public interface IStateManager
type IStateManager = interface
Public Interface IStateManager
Derived

Examples

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;
    }
}
' 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

Remarks

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.

Properties

IsTrackingViewState

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

Methods

LoadViewState(Object)

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

SaveViewState()

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

TrackViewState()

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

Applies to

See also