Al extender un control web asp.net, ¿en qué evento se deben inyectar controles web adicionales?
-
08-07-2019 - |
Pregunta
Estoy tratando de evitar un control compuesto o usando un ASCX extendiendo un control existente. Sin embargo, tengo problemas para agregar los controles al control heredado y mantener su integridad de estado de vista / posterior. Cada vez que agrego los controles durante el pre-renderizado, los controles aparecen, pero el post-back arroja una excepción de estado de vista. Intenté agregarlos tanto allí como durante LoadViewState (que por supuesto fue una tontería). Init no está disponible desde el control que estoy extendiendo.
La excepción es Sys.WebForms.PageRequestManagerServerErrorException: Error al cargar el estado de vistas. El control árbol en el que se está viendo viewstate cargado debe coincidir con el árbol de control que se usó para guardar viewstate durante La solicitud anterior. Por ejemplo, al agregar controles dinámicamente, el controles agregados durante un post-back must coincidir con el tipo y la posición de la controles agregados durante la inicial solicitud
Solución
En realidad, Microsoft dice que debe anular el Método CreateChildControls .
Puede llamar al método de clase base antes o después de agregar los controles, no estoy seguro de si hay una convención allí.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
¡Espero que eso ayude!
Otros consejos
Debe agregarlos en OnInit o en CreateChildControls. De todos modos, para evitar tener problemas con ViewState, lea este GRAN artículo . Posiblemente, muestra " 4. Inicializando controles secundarios mediante programación " es tu caso.