2009-04-27 15 views
6

Cargo dinámicamente un UserControl en una vista que está en un control MultiView. Aunque UserControl agrega un controlador de eventos, el evento nunca se dispara.Controlador de eventos UserControl que no se activa

¿Qué me falta aquí? Gracias!

Conteniendo página ASPX:

protected override void OnPreRender(EventArgs e) 
{ 
    if (MultiView1.ActiveViewIndex == 2) //If the tab is selected, load control 
    { 
     Control Presenter = LoadControl("Presenter.ascx"); 
     (MultiView1.ActiveViewIndex.Views[2].Controls.Add(Presenter); 
    } 
    base.OnPreRender(e); 
} 

Presenter.ascx.cs

override protected void OnInit(EventArgs e) 
{ 
    Retry.Click += this.Retry_Click; //This is a .Net 2.0 project 
    base.OnInit(e); 
} 


protected void Retry_Click(object sender, EventArgs e) 
{ 
    //This never fires 
} 

Respuesta

8

Creo que no está activando porque está cargando el control en el evento de prerender de su página. Después de la devolución, el control se pierde porque no hay estado de vista para él. Por lo tanto, no hay control para disparar su evento. Intente cargar el control en el evento init de la página. ¡Háganos saber lo que pasa!

+0

Eso fue todo. ¡Gracias! Tuve que eliminar la declaración If también porque en OnPreInit, MultiView1.ActiveViewIndex no está configurado. –

+0

eres bienvenido. –

+0

¡Muchas gracias! –

1

Parece que no se está añadiendo el control después de cada segundo palo, me gustaría tener la si la declaración en la página que contiene aspx para ver si eso soluciona el problema ... ¿estoy asumiendo que Reintentar es un botón?

+0

Ya había intentado eliminar la declaración If - no hay diferencia. Sí, volver a intentar es un botón. –

6

La gestión de eventos de postback se realiza antes de la representación, por lo que el control no está presente en la página de su caso.

Los eventos del ciclo de vida se disparan en este orden (omitido algunos):

  1. Init
  2. carga
  3. PreRender
  4. Unload

y manejo de eventos se realiza entre Load y PreRender (en caso de que algunos eventos cambien la forma en que se debe representar la página, tiene sentido).

Simplemente mueva su código que carga el control de reintento para cargar o iniciar.

Referencia: Asp.Net Page Life Cycle Overview

2

El control debe ser visible inicialmente para ser capaz de entrar en el evento OnPreRender. pero quizás quieras que no sea visible. asegúrese de tener EnableViewState = false;

Cuestiones relacionadas