¿Cómo se accede a Control.ViewState con una subclase de Control agregada dinámicamente?
Pregunta
Hemos creado un control que necesita conservar datos a través de la propiedad ViewState de la clase Control. Nuestras subclases de clase controlan estrictamente para obtener acceso a la propiedad ViewState (está protegida en el objeto Page). Estamos agregando el control a Page.Controls en OnInit y luego intentamos establecer la propiedad ViewState en OnPreLoad.
Cuando decodificamos y examinamos el ViewState de la página, nuestros valores no se han escrito y, por lo tanto, no están disponibles para su recuperación posterior.
¿Alguien sabe cómo podemos lograr que nuestro control participe en el proceso ViewState?
Solución
El problema es agregar el control a la página directamente. Desafortunadamente, esto es demasiado alto en la jerarquía de controles para participar en la Gestión de formularios ViewState. Si agrega el control a la colección de controles del formulario ASPNet en algún lugar, participará con éxito en LoadViewStateRecursive y SaveViewStateRecursive.
Otros consejos
Intente crear su control en OnInit, luego agréguelo a la página. Controles durante OnLoad.
ViewState no se carga hasta después de OnInit, sino antes de OnLoad.
Aquí hay un resumen del ciclo de vida de la página ( GregMac ) publicado en respuesta a una pregunta anterior de mio.