Para rematar con este asunto del almacenamiento temporal de datos de la aplicaicón y cumplir lo prometido en mi anterior post, voy a explicar el almacenamiento de página, que es bastante sencillo.

¿Qué pasa si queremos almacenar cierta información en nuestra página, que valga sólo para el usuario actual, y que esté disponible mientras dure el uso que éste hace de nuestra página?.

Podemos utilizar cualquier elemento de almacenamiento, atado al usuario como una variable de sesión, o no atado a éste (como la caché o una variable de aplicación), pero no es una buena solución puesto que tendremos que estar pendientes de liberar esa memoria cuando el usuario deje de utilizar la página y ya no lo necesitemos.

Existe un modo mejor de conseguirlo y es a través del ViewState.

Almacenamiento de página en ViewState

Como sabemos el ViewState se usa generalmente para almacenar el estado de los diferentes controles que colocamos en una página ASPX. Sin embargo esta característica es en realidad un modo de almacenar de manera codificada (que no cifrada) una jerarquía de datos. Se puede comprobar con cualquier decodificador del ViewState, como por ejemplo el de Denis Bauer.

El objeto ViewState de un control (una página ASPX no deja de ser una forma de control avanzado, ya que es una clase que deriva de System.Web.UI.Control) es un tipo especializado de colección. En concreto se trata de una clase StateBag que implementa la interfaz IDictionary. Por lo tanto se puede leer y escribir en él directamente asignando claves a cada valor que queramos almacenar. El ViewState se encarga de codificar la información y persistirla por defecto en la página actual.

Al programador un control se usa el ViewState para almacenar datos que debemos conservar entre llamadas a la misma página, y también para leerlos luego, claro está.

Para escribir o leer un valor en el ViewState sólo es necesario decidir qué nombre queremos darle. Por ejemplo:

ViewState("MisDatos") = "Info a almacenar"

y para leerlos al volver la página:

If Page.IsPostBack Then
    Dim s As String = ViewState("MisDatos").ToString()
End If

Es muy fácil almacenar información aquí. No obstante debemos tener cuidado de almacenar objetos que tengan un tamaño reducido o haremos que el ViewState ocupe demasiado y por lo tanto moverlo entre el servidor y el cliente y viceversa hará que las páginas vayan muy lentas. Generalmente está bien almacenar valores sencillos como identificadores o números pequeños, pero está mal almacenar clases grandes como por ejemplo un DataSet que contenga los resultados de una consulta.

Escrito por un humano, no por una IA