Todo el mundo sabe que Asp.Net usa ViewState para guardar la información en la página y la información definida por el usuario entre el cliente y el servidor.
En versiones anteriores a la 2.0, ViewState se almacena en controles ocultos en la página: __VIEWSTATE
No podemos cambiar cómo y dónde se guarda ViewState.
Ahora en 2.0, Asp.Net ha abierto esta función, lo que me permite personalizar la ubicación para guardar ViewState.
Se agregó un nuevo atributo a la clase Página en 2.0: PageStatePersister.
Podemos anular esta propiedad para implementar el guardado personalizado de ViewState. Esta propiedad devuelve una instancia de una subclase heredada de la clase PageStatePersister.
Se proporcionan dos métodos de guardado de forma predeterminada en 2.0: uno es guardar en la página (HiddenFieldPageStatePersister) y el otro es guardar en la sesión (SessionPageStatePersister).
El siguiente código anula la propiedad PageStatePersister y guarda ViewState en la sesión:
protected override PageStatePersister PageStatePersister
{
conseguir
{
devolver nuevo SessionPageStatePersister (este);
}
}
Además de estos dos métodos de guardado predeterminados, podemos heredar la clase PageStatePersister para implementar nuestros propios métodos de guardado.
El siguiente código demuestra cómo guardar ViewState en un archivo:
usando Sistema;
usando System.Data;
usando System.Configuration;
usando System.Web;
utilizando System.Web.Security;
utilizando System.Web.UI;
usando System.Web.UI.WebControls;
usando System.Web.UI.WebControls.WebParts;
usando System.Web.UI.HtmlControls;
usando System.IO;
usando System.Runtime.Serialization.Formatters.Binary;
/**//// <resumen>
/// Descripción resumida de CWingViewState
/// </summary>
clase pública CWingViewState: PageStatePersister
{
CWingViewState público (página de página): base (página)
{
}
anulación pública carga vacía()
{
Leer archivo();
}
anulación pública anular Guardar()
{
Escribir archivo();
}
WriteFile vacío privado()
{
Archivo FileStream = File.Create(@"C:CustomerViewState.CW");
BinaryFormatter bf = nuevo BinaryFormatter();
bf.Serialize(archivo, base.ViewState);
archivo.Flush();
archivo.Cerrar();
}
archivo de lectura vacío privado()
{
Archivo FileStream = File.OpenRead(@"C:CustomerViewState.CW");
BinaryFormatter bf = nuevo BinaryFormatter();
base.ViewState = bf.Deserialize(archivo);
}
}
En páginas específicas:
anulación protegida PageStatePersister PageStatePersister
{
conseguir
{
devolver nuevo CWingViewState (este);
}
}
Fuente: BLOG del espacio .Net