Sei sulla pagina 1di 22

View State y Control State

Instructor: Jorge Vizcarra


Concepto
Generalmente ASP.NET preserva el valor del contenido de un
control an cuando este control haya sido sometido a constantes
postback contra el servidor.
Esta caracterstica puede ser aadida a nuestros controles a
travs de dos maneras:
Uso de View State
Uso de Control State
ASP.NET toma ventaja de un campo oculto del formulario web
denominado __VIEWSTATE para preservar el estado de las
propiedades de control a travs del Postback. Si desea que sus
controles preserven los valores de sus propiedades, entonces
tiene que agregar dichos valor de propiedades a este campo
oculto del formulario web.
Usando View State
Puede utilizar la propiedad ViewState del control o de la
clase Page para agregar valores al View State. La
propiedad ViewState expone un diccionario de pares de
clave y valor. Por ejemplo, la siguiente declaracin
agrega la cadena Hola Mundo! Ver al Estado:
ViewState(mensaje)=Hola Mundo;
Debe agregar slo valores simples al ViewState, tales
como Strings, DateTimes, y nmeros enteros. Recuerde
que cualquier cosa que agregue a ViewState debe
aadirlo al campo oculto __VIEWSTATE. Si este campo se
hace demasiado grande, puede tener un impacto
significativo en el rendimiento de su pgina.
Ejemplo
El control que se muestra a continuacin
tiene 2 propiedades llamadas: Text y
ViewStateText. La primera propiedad no
utiliza ViewState, mientras que la segunda
s lo hace. El valor de la propiedad
ViewStateText es preservado a travs de
los postback automticamente.
Comentarios
Observe que la propiedad ViewStateText
utiliza la coleccin ViewState del control
para preservar cualquier valor que se asigna
a la propiedad ViewStateText en distintos
postback. Cuando se agrega un valor a la
coleccin ViewState, el valor se agrega en el
campo oculto __VIEWSTATE
automticamente.
Web Form
Haga un formulario que permita demostrar
el uso del control creado en la diapositiva
anterior. El formulario debe generar un
postback y debe observarse si se preserva el
valor o no en las propiedades Text y
ViewStateText del componente.
Uso del Control State (estado del control)
ASP.NET incluye una caracterstica
denominada Control State. Control State es
muy similar al View State. Al igual que view
state, cualquier valor que se agrega al control
del Estado se conservan en el campo oculto
__VIEWSTATE. Sin embargo, a diferencia del
view state, Control State no se puede
deshabilitar. Control State se destina a ser
utilizado slo para almacenar informacin
crucial entre distintos postback.
Ejemplo
El siguiente control incluye dos
propiedades: ViewStateText y
ControlStateText. View State es usado para
preservar los valores de ViewStateText y
Control State es usado para preservar los
valores de la propiedad ControlStateText
Comentarios
Observe que el control sobreescribe OnInit() de la
clase base, y los mtodos SaveControlState(), y
LoadControlState(). En el mtodo OnInit(), se llama
al mtodo RegisterRequiresControlState() para
indicar que el control debe
utilizar el Control State.
SaveControlState() y LoadControlState() son
responsables de guardar y cargar el Control State.
Observe que el control state es guardado como un
objeto. El objeto se serializa en ASP.NET mediante el
en campo de formulario __VIEWSTATE
automticamente.
Web Form
Construya un web form que utilice este
componente de tal forma que se note la
diferencia entre ambos mtodos para
conservar el estado.
Procesando Postback con datos y
eventos
Si un control inicia un Postback, entonces un evento del
lado del servidor puede ser desencadenado. Por ejemplo
si hace click en un botn de comando, un evento Click()
es desencadenado en el servidor cuando el formulario
que contiene el botn es procesado de vuelta al
servidor este evento es denominado postback event
Cuando enva un formulario que contiene un TextBox, la
data del formulario es pasada al TextBox cuando el
formulario es enviado al servidor. Esto se denomina
postback data
Cuando construye un control personalizado debe tener
en cuenta los tipos de postback a utilizar por su control.

Manejando postback data
Si su control necesita procesar datos del
formulario enviados al servidor, entonces
necesita implementar la interface
IPostbackDataHandler. Esta interface incluye
los siguientes dos mtodos:
LoadPostData()
RaisePostDataChangedEvent()
Por ejemplo, el siguiente control es un simple
cuadro de texto implementa la interface
IPostbackDataHandler para preservar los
datos de un campo a travs de postbacks.
Comentarios
El mtodo LoadPostData() recibe los campos del formulario
enviados por algn mtodo desde el navegador, luego son
pasados a una coleccin de todos los campos del formularios
que hayan sido posteados, postDataKey representa el
nombre del campo que corresponde con el control actual.
Si el valor del campo del formulario ha cambiado, en otras
palabras, no coincide con el valor actual de la propiedad Text,
entonces la propiedad Text es actualizada y el mtodo retorna
True. En otro caso, el mtodo retorna False.
Cuando el mtodo LoadPostData() retorna True, el mtodo
RaisePostDataChangedEvent() es ejecutado. Tpicamente, puede
implementar este mtodo para desencadenar un evento de
cambio. Este mtodo es usado para desencadenar el evento
TextChanged, indicando que el contenido del TextBox ha
cambiado.
Webform
Cree un webform que permita utilizar el
componente antes explicado, de tal forma
que el evento TextChanged haya sido
desencadenado y por lo tanto la data
contenida por el Textbox haya sido
procesada.
Manejando eventos del postback
Slo un control en una pgina a la vez causar
que un formulario sea enviado de vuelta al
servidor. Cuando un control inicializa un
postback, dicho control desencadena un evento
del postback.
Para procesar un evento del postback, necesita
implementar la interface
IPostBackEventHandler. Esta interfaz incluye
este mtodo:
RaisePostBackEvent(): Invocado en el servidor
cuando un control inicializa un postback.
Ejemplo
El ejemplo presentado a continuacin le
permite ver cmo implementar la Interface
IPostBackEventHandler sobre un enlace
(link).
Comentarios
El cdigo anterior es un sencillo control Linkbutton personzalizado.
Trabaja de manera similar al control de ASP.NET. Cuando hace click en
el link representado por el control en el navegador, el formulario que
contiene el control es enviado de vuelta al servidor y el mtodo
RaisePostBackEvent() es invocado. En este ejemplo este mtodo
simplemente desencadena el evento click.
Note que el mtodo Page.ClientScript.GetPostBackClientHyperlink() es
invocado en el mtodo AddAttributesToRender() del control. El
mtodo GetPostBackClientHyperLink() retorna un script deJavascript
que inicializa el postback del formulario en el navegador. Este es el
script luego de la invocacin:
javascript:__doPostBack(CustomLinkButton1,)
El mtodo de javascrip :__doPostBack() llama al mtodo del lado del
cliente submit(), el cual causa que el formulario sea enviado de
vuelta al servidor. (Puede ver esto en su navegador viendo el codigo
fuente).

WebForm
Cree un webform que utilice el componente
anterior. Verificar el evento click
correspondiente.

Potrebbero piacerti anche