StateItem Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um item salvo na classe StateBag quando informações de estado de exibição são persistidas entre as solicitações da Web. Essa classe não pode ser herdada.
public ref class StateItem sealed
public sealed class StateItem
type StateItem = class
Public NotInheritable Class StateItem
- Herança
-
StateItem
Exemplos
O exemplo de código a seguir usa as Value propriedades e IsDirty da StateItem classe para salvar o estado de uma classe de controle de servidor ASP.NET personalizada simples, StateBagSample
. Quando a página é postada no servidor, a IsDirty propriedade verifica se o item foi modificado. Os valores de estado são exibidos acessando a Value propriedade .
// 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
Comentários
O estado de exibição é o acúmulo de valores de propriedade de uma página ou de um controle de servidor ASP.NET e é enviado para o navegador solicitante em um campo oculto.
Você pode adicionar StateItem explicitamente objetos a um objeto de controle de StateBag servidor ASP.NET usando a Item[] propriedade ou o Add método . Em StateBag seguida, controla as alterações em todos os itens que armazena. Todas as alterações em um StateItem objeto são refletidas em sua IsDirty propriedade. Essas alterações são salvas por uma chamada para o SaveViewState método durante a fase salvar estado de exibição do processamento de controle do servidor, logo antes de o controle ser renderizado na página. Para obter mais informações, consulte ASP.NET Controles de Servidor Web.
Propriedades
IsDirty |
Obtém ou define um valor que indica se o objeto StateItem foi modificado. |
Value |
Obtém ou define o valor do objeto StateItem armazenado no objeto StateBag. |
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |