2010-07-01 27 views
7

¿Cómo obtener el control en el evento PreInit de ASP.NET? Los punteros son nulos y el método FindControl devuelve null.¿Cómo obtener el control en el evento PreInit de ASP.NET?

Estoy utilizando páginas maestras y de contenido. de marcado de la página de contenido es el siguiente:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server"> 
    <asp:Table ID="Table1" runat="server" Width="100%"> 
     ..... 
    </asp:Table> 
</asp:Content> 

Y código como este:

private void Page_PreInit(object sender, EventArgs e) 
{ 
    Control table = this.FindControl("Table1"); 
    //table is null here 
} 

Así mesa todavía es nulo después de this.FindControl ("Tabla 1"). NamingContainer de la página también es nulo. ¿Qué estoy haciendo mal?

ACTUALIZACIÓN Tengo que usar este evento para crear controles. Como se dijo en el ASP.NET Page Life Cycle Overview, este evento se debe usar para la creación de control dinámico. Necesito crear una lista de enlaces en mi mesa. ¿Puede haber otra forma de hacerlo?

+0

No estoy seguro de lo que está haciendo mal. ¿Tienes que usar el evento PreInit? ¿Puedes usar un evento posterior como Init? –

+0

Como dice Matthew, un evento posterior podría ser mejor para ti. Sospecho que es un hecho que muchos de los controles realmente se juntan, por lo que si intenta acceder a ellos demasiado pronto en el ciclo de vida, todo se desmorona. http://msdn.microsoft.com/en-us/library/ms178472.aspx podría ser útil si ya no lo ha visto. – Chris

+0

Después de leer su edición, generalmente agrego cosas al árbol de control en el evento page_load. No estoy seguro de a qué se refiere la sección a la que se refiere para ser sincero, pero no creo que signifique simplemente agregar un enlace a una página ... – Chris

Respuesta

4

El preinicio se dispara antes de que se inicien los controles. Lea en el ASP.NET Page Life Cycle para obtener información más detallada.

Init
levantada después de que todos los controles se han inicializado y se han aplicado ninguna piel configuración. El evento Init de controles individuales se produce antes del evento Init de la página.

Utilice este evento para leer o inicializar propiedades de control.

+0

Ver mi actualización. –

0

En el evento PreInit(), los controles estándar (definidos) aún no se han creado en esa etapa, por lo que no se puede obtener ninguna referencia a ningún control.

Utilice el evento Page_Load() para crear controles dinámicos. Durante este evento, puede agregar cualquier control dinámico a los controles existentes.

Después de crear los controles dinámicos en Page_Load(), use PreRender() para realizar cambios/actualizaciones.

Personalmente, utilizo PreInit para definir objetos de toda la página (es decir, conexiones de bases de datos, objetos de sesión de usuario) y también donde realizo únicamente comprobaciones de autenticación de seguridad (y redirecciones si no están autorizadas).

1

El evento PreInit de la página se desencadena antes de que se inicialicen los controles, por lo que los controles todavía no existen. Tendrá que acceder al control en un evento posterior, como el evento Carga de la página. Por favor, consulte http://msdn.microsoft.com/en-us/library/ms178472.aspx.

Cuestiones relacionadas