View State y Control State

22
View State y Control State Instructor: Jorge Vizcarra

Transcript of View State y Control State

View State y Control State

View State y Control StateInstructor: Jorge Vizcarra

ConceptoGeneralmente 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 StateUso de Control StateASP.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 StatePuede 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.EjemploEl 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.

ComentariosObserve 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 FormHaga 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.EjemploEl 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

ComentariosObserve 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 debeutilizar 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 FormConstruya 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 eventosSi 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 eventCuando 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 dataCuando construye un control personalizado debe tener en cuenta los tipos de postback a utilizar por su control.

Manejando postback dataSi 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.14

ComentariosEl 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.WebformCree 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 postbackSlo 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.EjemploEl ejemplo presentado a continuacin le permite ver cmo implementar la Interface IPostBackEventHandler sobre un enlace (link).

ComentariosEl 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).

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