asp.net events user-controls asp.net-3.5

asp.net - ¿Cómo establecer las propiedades de control del usuario antes de que se renderice?



events user-controls (5)

Tengo un Control de usuario (uc) en una página. uc expone algunas propiedades que se configuran en el evento Page_Load () de la página primaria, y debe leerse mientras se carga el control de usuario.

Parece que Page_Load () de los incendios uc antes de que se establezcan las propiedades desde la página principal.

¿En qué evento debo establecer las propiedades uc para que pueda usar esas propiedades a medida que se procesa?

Uso ASP.NET 3.5 y C #

ps solo busqué una solución de mi código anterior:

en Page_Load del control do:

Page.LoadComplete += delegate { LoadTheControl(); };

aun así me gustaría escuchar tus ideas.


YO SOLO encontré este problema esta tarde.

Creé un método público en UserControl llamado LoadData () y lo llamé desde Page_Load de mi página de hosting después de configurar la propiedad de la que dependían los datos.

Agregado - ejemplo de código

En el control de usuario:

public property SomeProp {get, set}; public void LoadData() { // do work }

y en Page_Load en la página de alojamiento

myControl.SomeProp = 1; myControl.LoadData();


Puede obtener acceso a la propiedad OnPreRender sin ningún truco.


Si coloca el control de usuario en la página de forma declarativa, simplemente configure la propiedad allí.

<cc1:myUserControl MyProperty="1" />

Si agrega dinámicamente los controles a la página, simplemente establezca la propiedad antes de agregar el control a la colección de control de la página de alojamiento. Ninguno de los eventos del ciclo de vida del control se activará hasta que llame a Page.Controls.Add(myUserControl) .

Si es imposible evitar la configuración que tienes ahora, y el padre debe realizar alguna lógica en Page_Load y la UC tiene que estar allí ya, entonces sugeriría lo que David Stratton publicó, pero en mi experiencia esto generalmente está estandarizado se llamará Initialize() o Init() .


Bueno, ninguna de las respuestas me ayudó. Pero cuando se establece manualmente las propiedades en el evento InitComplete () todo funciona bien. Mi control de usuario ahora estaba habilitado para leer la propiedad DESPUÉS de establecer la propiedad no antes.


He encontrado un problema similar:

Primero agrego un UserControl dinámicamente y luego intento asignar valores a los controles internos del control (un cuadro de texto dentro del control del usuario). Usando cualquier evento como INIT o LOAD, el control me da una excepción de referencia nula , porque como se evidencia al recorrer el código, los controles aún no se han creado.

Más tarde descubrí que este problema solo ocurre si declaro el control a través de una declaración tenue;

Dim MyControl as new MyUserControl Me.Panel1.Controls.add(MyControl) MyControl.SetLabelText("My Name") ''Uses a method to set the label text on load.

Por otro lado, si uso el control de la siguiente manera, funciona bien:

Dim MyControl as MyUserControl = LoadControl("MyUserControl.ascx") Me.Panel1.Controls.add(MyControl) MyControl.SetLabelText("My Label Text")