2009-06-02 44 views

Respuesta

11

En general, deberías enlazar en o después de Cargar(). El evento Init() está destinado a permitirle crear cualquier control creado dinámicamente antes de vincular los eventos, de modo que existan cuando deba realizarse el enlace. Sin embargo, Load() no es la única opción ... si necesita demorar el enlace en un control por cualquier razón, también puede vincular el evento PreRender(). También es posible realizar una configuración adicional en Load(), llamar al método DataBind() de las páginas y manejar los eventos vinculantes de la página para vincularlos de una forma aún más estructurada, si es necesario.

+0

+1 por mencionar 'PreRender' (no lo mencioné) porque llama' EnsureChildControls' recursivamente en todos los elementos secundarios. – Cerebrus

+1

¿Alguna guía sobre las mejores prácticas? Con tantos eventos para elegir inicialmente, parece que no hay una mejor opción clara. En particular, controlador de eventos DataBinding de PreRender frente a control. Argh, gracias a Dios por MVC –

+1

Ditto @ MVC. : D En cuanto a las mejores prácticas ... comience con Load() y refine según sea necesario. Load() generalmente es el mejor lugar para comenzar, a menos que sepa a ciencia cierta que debe vincularse más tarde o que tenga una razón específica para activar la página global DataBind. La mayoría de las veces, si necesita vincular PreRender, es debido a un problema de ejecución y ordenamiento que a menudo resulta cuando lo que está vinculado a un control depende de que otro proceso se complete primero. – jrista

3

Dependería del caso particular, sin embargo, la respuesta más común sería Page_Load porque eso es generalmente suficiente para la mayoría de los escenarios de enlace de datos.

Incluso para los escenarios de enlace de datos complejos, Page_Init haría no ser un lugar apropiado porque los controles de contenedores como el GridView cargan a sus hijos sólo durante el evento Page_Load. Necesita ir más abajo en el ciclo de vida para acceder a esos niños.

En mi caso, sin embargo, la respuesta sería "ninguno". Esto se debe a que nunca me comunico directamente con un control dentro de Page_Load. Lo que en cambio prefiero es tener un método separado que haga el enlace de datos y se puede invocar desde Page_Load o cualquier otra función si necesito volver a enlazar después de las devoluciones de datos.

Cuestiones relacionadas