IStateManager 介面

定義

定義任何類別必須實作以支援伺服器控制項之檢視狀態管理的屬性和方法。

public interface class IStateManager
public interface IStateManager
type IStateManager = interface
Public Interface IStateManager
衍生

範例

下列程式代碼範例示範實作 介面的 IStateManager 類別。 它包含 屬性的 IsTrackingViewState 實作,以及 LoadViewStateSaveViewStateTrackViewState 方法。

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

備註

伺服器控制件的檢視狀態包含控制項屬性的累計值。 這個介面包含儲存和載入伺服器控件檢視狀態值的方法,以及指示控件追蹤其檢視狀態的任何變更的方法。

若要自定義 ASP.NET 應用程式管理伺服器控制項檢視狀態的方式,您必須建立實作此介面的 StateBag 類別,因為您無法繼承自 類別。

屬性

IsTrackingViewState

當類別實作時,取得值,表示伺服器控制項是否正追蹤其狀態變更。

方法

LoadViewState(Object)

當類別實作時,載入伺服器控制項預先儲存的檢視狀態到控制項。

SaveViewState()

當類別實作時,儲存伺服器控制項檢視狀態的變更至 Object

TrackViewState()

當類別實作時,指示伺服器控制項以追蹤其檢視狀態的變更。

適用於

另請參閱