Mantener el estado en un control
Los controles de servidor de ASP.NET heredan de Control una propiedad denominada ViewState que les permite participar fácilmente en el mantenimiento del estado. El tipo de ViewState es System.Web.UI.StateBag, que es un diccionario en el que se almacenan pares de nombre y valor. El área de trabajo de la página ASP.NET conserva ViewState en una variable de cadena que se envía al cliente y se recibe de vuelta de él como variable oculta. Cuando se produce la devolución, el área de trabajo de la página analiza la cadena de entrada de la variable oculta y establece la propiedad ViewState de cada control. Si en lugar de un campo privado un control utiliza ViewState para datos de propiedad, la propiedad se conservará automáticamente entre los trayectos de ida y vuelta hacia el cliente. Si una propiedad no se conserva en ViewState, es recomendable especificar su valor predeterminado en la devolución.
En el fragmento de código siguiente se muestra una propiedad guardada en ViewState.
public String Text {
get {
return (String) ViewState["Text"];
}
set {
ViewState["Text"] = value;
}
}
[Visual Basic]
Public Property Text() As String
Get
Return CType(ViewState("Text"), String)
End Get
Set
ViewState("Text") = value
End Set
End Property
Para consultar un ejemplo del uso de ViewState para almacenar propiedades, vea el Tutorial rápido de ASP.NET —> Formularios Web Forms ASP.NET —> Crear controles personalizados.
Nota En general, ViewState se usa para conservar datos de formulario en una página de un trayecto a otro. No utilice ViewState para almacenar información como contraseñas, cadenas de conexión y rutas de acceso de archivos. Para obtener información sobre cómo compartir datos entre páginas o utilizar un almacenamiento permanente, vea Administración de estados de ASP.NET.
Tipos que pueden conservarse en ViewState
Todos los tipos serializables o que tengan definido un TypeConverter pueden conservarse en ViewState. Sin embargo, los tipos que únicamente son serializables son más lentos y generan una propiedad ViewState mucho mayor que los que tengan definida una clase TypeConverter propia. ViewState se serializa con un formato de serialización de objetos limitado, optimizado para los tipos primitivos y para los tipos String, ArrayList y HashTable.
ViewState y el rendimiento
Los programadores de controles deben tener en cuenta que todos los datos contenidos en ViewState recorren automáticamente un trayecto de ida y vuelta hasta el cliente. Estos trayectos suponen una carga adicional para el rendimiento, por lo que es importante hacer un uso razonable de ViewState. Si varias propiedades dependen de datos comunes, para optimizar el rendimiento puede conservar en ViewState únicamente los elementos clave. Cada control hereda de Control una propiedad denominada EnableViewState que permite a sus consumidores habilitar o deshabilitar la conservación de su ViewState.
Personalizar la restauración del estado con ViewState
Para mejorar el rendimiento o para guardar un tipo personalizado que no pueda almacenarse de forma predeterminada en ViewState, un control puede personalizar el modo en que los datos se almacenan en ViewState. Si un control personaliza el almacenamiento de datos de propiedades, también deberá proporcionar una implementación personalizada para restablecer los valores de las propiedades a partir de los datos almacenados en ViewState. La clase base Control ofrece dos métodos para este fin: SaveViewState y LoadViewState. Estos métodos tienen la firma siguiente:
protected virtual object SaveViewState();
protected virtual void LoadViewState(object savedState);
[Visual Basic]
Overridable Protected Function SaveViewState() As Object
Overridable Protected Sub LoadViewState(ByVal savedState As Object)
Para obtener un ejemplo de cómo reemplazar SaveViewState y LoadViewState, vea Ejemplo de control enlazado a datos a partir de plantillas.
Vea también
Administración de estados de ASP.NET | Estado de sesión | Estado de la aplicación