Reducir el tamaño del ViewState en un DropDownList

Si tenemos en una página en ASP .NET varios controles DrowDownList con muchos valores y necesitamos mantener el ViewState para recuperar el valor seleccionado en cada PostBack, en el ViewState se estará  almacenando la información de cada uno de los valores de cada DropDownList.

Aunque la página sea muy sencilla, el resultado de tener estos controles con el ViewState habilitado puede ser una página bastante grande y, por lo tanto, el tamaño de los datos enviados de ida y vuelta puede ser grande también.

Pero puede que no sea necesario mantener toda esta información en el ViewState, ya sea porque el contenido del desplegable sea estático, porque no nos importe reconstruir las listas en cada llamada al servidor, porque los datos para construir la lista estén cacheados, porque sea importante para nosotros el tamaño final de la página, etc.

Sin embargo, si deshabilitamos el ViewState de un control DropDownList veremos que se deja de recordar el valor seleccionado entre cada PostBack.

La solución es bastante sencilla, y consiste en recargar «manualmente» los DropDownList en cada PostBack, utilizando para ello el método Page_Init:

void CargarDropDownLists() {
   ddl1.DataSource = //Obtener lista de valores de BdD, caché, etc
   ddl1.DataBind();

   ddl2.DataSource = //Obtener lista de valores de BdD, caché, etc
   ddl2.DataBind();
}

void Page_Init() {
   CargarDropDownLists();
}

Utilizamos el método Page_Init en lugar del Page_Load, ya que este último se ejecuta después de que los valores de la propiedad «SelectedValue» sean asignados. Si probáis a utilizar el método Page_Load comprobaréis que no funciona. Sin embargo, utilizando el método Page_Init para rellenar los desplegables, todo funciona igual que si el ViewState estuviera habilitado.

No nos olvidemos de deshabilitar primero el ViewState de todos los DropDownList con la propiedad EnableViewState=»False».

Nuestra puntuación
Twittear
Compartir
Compartir
Pin