StateItem Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.
public ref class StateItem sealed
public sealed class StateItem
type StateItem = class
Public NotInheritable Class StateItem
- Héritage
-
StateItem
Exemples
L’exemple de code suivant utilise les Value propriétés et IsDirty de la StateItem classe pour enregistrer l’état d’une classe de contrôle serveur ASP.NET simple personnalisée, StateBagSample
. Une fois la page publiée sur le serveur, la IsDirty propriété vérifie si l’élément a été modifié. Les valeurs d’état sont affichées en accédant à la Value propriété .
// 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());
}
}
}
' 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.
Imports System.Web
Imports System.Web.UI
Imports System.Collections
Imports System.Security.Permissions
Namespace StateBagSampleVB
' 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
' 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 NotInheritable Class MyControl
Inherits Control
Private myItem As MyItem
Public Sub New()
myItem = New MyItem("Hello World!")
End Sub
' Override the LoadViewState method of the Control class.
Protected Overrides Sub LoadViewState(ByVal savedState As Object)
If Not (savedState Is Nothing) Then
Dim myState As Object() = CType(savedState, Object())
If Not (myState(0) Is Nothing) Then
MyBase.LoadViewState(myState(0))
End If
If Not (myState(1) Is Nothing) Then
CType(myItem, IStateManager).LoadViewState(myState(1))
End If
End If
End Sub
' Override the TrackViewState method of the Control class
' to call the version of this method that was
' implemented in the MyItem class.
Protected Overrides Sub TrackViewState()
MyBase.TrackViewState()
If Not (myItem Is Nothing) Then
CType(myItem, IStateManager).TrackViewState()
End If
End Sub
' Override the SaveViewState method of the Control class to
' call the version of this method that was implemented by
' the MyItem class.
Protected Overrides Function SaveViewState() As Object
Dim baseState As Object = MyBase.SaveViewState()
Dim itemState As Object
If Not (myItem Is Nothing) Then
itemState = CType(myItem, IStateManager).SaveViewState()
Else
itemState = Nothing
End If
Dim myState(1) As Object
myState(0) = baseState
myState(1) = itemState
Return myState
End Function 'SaveViewState
Public Sub SetMessage(ByVal mesg As String)
myItem.Message = mesg
End Sub
Public Function GetMessage() As String
Return myItem.Message
End Function 'GetMessage
' Display the contents of Message and ViewState properties.
Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
' 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())
End Sub
End Class
End Namespace 'StateBagSampleVB
Remarques
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 ajouter StateItem explicitement des objets à un objet ASP.NET contrôle serveur à l’aide de StateBag la Item[] propriété ou de la Add méthode . Effectue ensuite le StateBag suivi des modifications apportées à tous les éléments qu’il stocke. Toutes les modifications apportées à un StateItem objet sont répercutées dans sa IsDirty propriété. Ces modifications sont enregistrées par un appel à la méthode pendant la SaveViewState phase d’enregistrement de l’état d’affichage du traitement du contrôle serveur, juste avant le rendu du contrôle sur la page. Pour plus d’informations, consultez contrôles serveur web ASP.NET.
Propriétés
IsDirty |
Obtient ou définit une valeur indiquant si l'objet StateItem a été modifié. |
Value |
Obtient ou définit la valeur de l'objet StateItem qui est stocké dans l'objet StateBag. |
Méthodes
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |