Presentando a PageStatePersister de ASP.NET 2.0


Las peticiones y respuestas HTTP son intrínsecamente sin-estado. Para mantener el estado entre las peticiones HTTP, las páginas del servidor ASP.NET pueden almacenar el estado de la página. Este estado, es llamado ViewState, que almacena los datos de los controles para hacer que la página y los controles se muestren de la misma manera que el usuario los vio y con los que interactuó en el último viaje de ida y de vuelta de la página.

ASP.NET 2.0 proporciona diversos mecanismos para guardar el ViewState entre las peticiones sucesivas de la misma página. La clase abstracta PageStatePersister representa la clase base para éstos mecanismos de almacenamiento de estado. Por lo general los desarrolladores de páginas ASP.NET no necesitan utilizar la propiedad PageStatePersister. Sin embargo es utilizada por los desarrolladores de controles y adaptadores que desean extender la funcionalidad de la clase Page.

El mecanismo de la persistencia por defecto de ASP.NET es guardar el ViewState en el cliente usando la clase HiddenFieldPageStatePersister que implementa los métodos Save y Load de la clase PageStatePersister de modo que el objeto Page pueda guardar el estado en el elemento HTML oculto <hidden> llamado "__VIEWSTATE". El guardado del ViewState y los datos con cada HTTP-Request y HTTP-Response se realiza muy bien de modo general de esta manera, y es importante en grandes escenarios de "web farms" porque no importa que el servidor web mantiene la petición: el estado de la página está disponible en el contexto actual para el servidor para desplegar la página de manera exacta.

Pero en escenarios donde las páginas son servidas hacia dispositivos pequeños que tienen recursos limitados del lado cliente o utilizan un lenguaje de marcado que no soporta un elemento de campo oculto, se requiere almacenar el ViewState en el servidor. Los adaptadores de página de dispositivo ASP.NET pueden remplazar el método GetStatePersister para devolver un objeto SessionPageStatePersister que almacena el estado de la página en el servidor en el objeto Sesion asociado con el cliente.

Visual Basic

Imports System.Web.UI
Namespace Samples.AspNet.VB
  Public Class MyPageAdapter
  Inherits System.Web.UI.Adapters.PageAdapter
    Public Overrides Function GetStatePersister() _
        As PageStatePersister
      Return New SessionPageStatePersister(Page)
    End Function 'GetStatePersister
  End Class 'MyPageAdapter
End Namespace

C#

namespace Samples.AspNet.CS {
  using System.Web.UI;
  public class MyPageAdapter : System.Web.UI.Adapters.PageAdapter {
    public override PageStatePersister GetStatePersister() {
      return new SessionPageStatePersister(Page);
    }
  }
}

Para guardar el ViewState en los clientes que no pueden soportar los mecanismos existentes de persistencia del ViewState, se puede extender la clase PageStatePersister para introducir métodos propios de persistencia del ViewState, y se puede utilizar los adaptadores de la página para configurar la aplicación ASP.NET para utilizar diversos mecanismos de persistencia del ViewState basados en el tipo de cliente a el cual se sirve una página. Las clases que derivan de la clase PageStatePersister deben remplazar (override) el método abstracto Save para guardar el ViewState en el medio de persistencia, y remplazar el método Load para extraerlo. Si se necesita serializar el ViewState a una cadena de caracteres, se puede utilizar el objeto IStateFormatter que es accesible mediante la propiedad StateFormatter. También se puede remplazar la propiedad de StateFormatter para proveer un mecanismo propio de serialización del estado del objeto.

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, ASP.NET. Guarda el enlace permanente.

Una respuesta a Presentando a PageStatePersister de ASP.NET 2.0

  1. NA dijo:

    Muy buen post!, me sirvio mucho para un caso particular que tenia, gracias!

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