Y donde estan mis variables?

Cuando recién estamos comenzando a desarrollar con ASP.net, e IDEs tales como Visual Studio 2005. Usuarios que nunca vieron o trabajaron en Web se encuentran con un ambiente de desarrollo similar o casi igual al de desarrollo Windows.

Es fácil, por este motivo, caer en el error de suponer que las variables globales, declaradas fueras de métodos o funciones, no pierdan sus valores.

En posts anteriores comenté un poco del funcionamiento del web, y como es el trabajo entre el cliente y el servidor.

Teniendo en cuenta esto último, es mas fácil comprender el porque estas variables no persisten. Por lo que nos vemos en la obligación de crear o buscar mecánicas para poder mantener esta información cada vez que la pagina se recarga.

Entre algunas de estas posibilidades tenemos el uso de variables SESSION. Pero estas, tienen un contexto relacionado al usuario, donde, si por ejemplo, quisiéramos mantener una variable buleana que solo es usada para una página, se convierte en un desperdicio de memoria. Esta variable acompañara al usuario por todas las páginas Web que visite dentro de nuestro sitio. Si a esto le sumamos el tiempo de caducidad de las mismas, donde, una variable SESSION necesita de cierto tiempo de inactividad por parte del usuario para ser destruida, un usuario que ingreso por unos segundos a nuestro sitio y luego salió, provocará que esta variable permanezca en memoria por lo menos, 20 minutos.

A todo este desastre, sumémosle miles de usuarios en nuestro sitio.

Otra alternativa, podría ser guardar esta información en una base de datos, pero no hay que ser muy avispado para darse cuenta que la sobrecarga de transacciones, uso de memoria y demás es aun peor que la alternativa anterior.

Podríamos también, usar un archivo XML, pero al final, los procesos involucrados para poder manipularlo, son prácticamente, iguales de prohibitivos que el de una base de datos.

He aquí que tenemos una solución que se aplica especialmente para estas ocasiones. Teniendo en cuenta que solo necesitamos mantener algunas variables en una pagina mientras que el usuario se encuentre en esta. ASP.net nos presenta un mecanismo llamado ViewState.

Este ViewState simplemente es un registro que se almacena en el HTML de la misma página web. Y cada vez que la pagina realiza un postback, es descifrado y los valores contenidos son asignados a cada variable u objeto que almaceno información en él.

Esta claro que el ViewState no es algo que solo usamos nosotros. Una de las características notables de ASP.net es la posibilidad de que, en cada postback, los datos almacenados en los controles Web no pierdan sus valores. Esto, justamente, se logra mediante el uso del ViewState. ASP.net almacena la información dentro de este, y en cada postback recupera y manipula la información asignándola a los controles respectivos.

Posiblemente una de las principales ventajas de usar el ViewState radica en que cada usuario podría tener, para la página que esta viendo en ese momento, información completamente diferente a la de otro usuario que visita la misma pagina, y la magnitud de esta información almacenada, solo afectara a ese usuario.

Para poder hacer uso del ViewState veamos los siguientes ejemplos.

Asignación de datos:

ViewState("NombreDescriptivo") = Valor

Recuperación de datos:

Variable = ViewState("NombreDescriptivo")

Para ver un ejemplo en funcionamiento: 

    Private blnStatus As Boolean

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            blnStatus = CType(ViewState.Item("Status"), Boolean)
        End If
    End Sub

    Protected Sub btnAccion_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAccion.Click
        blnStatus = True
    End Sub

    Protected Sub btnAccion_Unload(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAccion.Unload
        ViewState.Item("Status") = blnStatus
    End Sub

Dentro de una clase que maneje una pagina web, creamos una variable buleana. En el evento Load de la pagina, por cada postback asignaremos el valor almacenado en el ViewState a la variable. Es necesario, para garantizar la correcta asignación de los datos, realizar un cast de la información almacenada.

En el evento Click de un botón modificamos el estado de la variable. Esto podría ser realizado por cualquier pieza de código.

Finalmente, en el evento UnLoad de la pagina, volvemos a subir toda la información al ViewState para no perder los estados, para, finalmente, en el evento Load comenzar con el ciclo.

Una desventaja que podemos encontrar en el uso del ViewState radica en que toda la información es escrita en el HTML, por lo que grandes volúmenes de información podrías hacer que el cargado de la pagina, entre postback, sea lento.

De cualquier manera, en el ViewState podemos almacenar casi cualquier cosa. Desde variables hasta objetos. En el caso de objetos, estos deben tener la capacidad de ser serializables.


One Comment on “Y donde estan mis variables?”

  1. Para los que necesitan utilizar una variable en un aspx y que no se pierda con el PostBack sin utilizar variables de Sesión.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s