Controles de servidor Web dinámicos y estado de vista

Actualización: noviembre 2007

Si un control se crea de forma dinámica en tiempo de ejecución, parte de su información se almacena en el estado de vista que se representa con la página. No obstante, cuando la página se envía otra vez al servidor, se crean instancias de los controles no dinámicos (los que están definidos en la página) en el evento Init y se carga la información del estado de la vista antes de que se pueden volver a crear los controles dinámicos, normalmente en el controlador Page_Load). En la práctica, antes de que se creen de nuevo los controles dinámicos, el estado de vista pierde provisionalmente la sincronización con los controles de la página. Después de ejecutarse el evento Page_Load, pero antes de que se llame a los métodos de control de eventos del control, la información restante del estado de la vista se carga en los controles creados de dinámicamente.

En la mayoría de los escenarios, este modelo de procesamiento del estado de vista funciona perfectamente. Normalmente, los controles dinámicos se agregan al final de la colección de controles de un contenedor. Por lo tanto, la información de estado de vista almacenada para los controles dinámicos es información adicional incluida al final de la estructura de estado de vista para el contenedor pertinente, y la página puede hacer caso omiso de ella hasta la creación de los controles.

No obstante, la información de estado de vista relativa a los controles creados de forma dinámica puede plantear un problema en dos escenarios:

  • Cuando se insertan controles dinámicos entre controles existentes.

  • Cuando se insertan controles de forma dinámica y después se insertan otra vez durante una acción de ida y vuelta, pero con valores diferentes.

Cuando se insertan controles dinámicos entre controles existentes, la información de estado de vista de los controles dinámicos se inserta en la ubicación correspondiente de la estructura de estado de vista. Cuando se envía la página y se carga el estado de vista, el control dinámico aún no existe; por lo tanto, la información adicional del estado de vista no se corresponde con el control correcto. El resultado de esto normalmente es un error que indica una conversión de tipo no válida.

Si se reinsertan controles en cada acción de ida y vuelta, cada generación de los controles creados dinámicamente obtendrá valores de propiedad a partir del estado de la vista del conjunto de controles precedente. En muchos casos, este problema se puede evitar si se establece la propiedad EnableViewState del control contenedor en false. En este caso, no se guarda información de los controles dinámicos y no se producen conflictos con las versiones sucesivas de los controles.

Para obtener información detallada sobre el estado de vista, vea

Información general sobre el ciclo de vida de una página ASP.NET

Información general sobre la administración de estados de ASP.NET y ViewState.

Vea también

Otros recursos

Agregar controles ASP.NET mediante programación

Establecer las propiedades de un control de servidor ASP.NET mediante programación