2009-09-11 19 views
9

Estoy tratando de generar un evento de clic desde el control de usuario y manejarlo en la página que contiene. El problema que tengo es que cuando hago clic en el botón 'imgstep1' en el control del usuario, el código detrás del evento imgstep1_click se desencadena pero el evento 'btnHandler' siempre es nulo. Por lo tanto, no llama al evento principal.EventHandler es nulo

Cualquier ayuda sobre esto será muy apreciada.

Mi Código de Control de usuario es:

Ascx código:

<asp:ImageButton ImageUrl="./images/step1.gif" 
     ID="imgstep1" runat="server" 
     OnClick="imgstep1_Click"/> 

.ascx.cs código:

public delegate void OnImageButtonClick(); 
    public event OnImageButtonClick btnHandler; 

    protected void imgstep1_Click(object sender, ImageClickEventArgs e) 
    { 
     if (btnHandler != null) 
      btnHandler(); 
    } 

.aspx código de la página:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler); 
} 

void ucStepHdr_btnHandler() 
{ 
    Response.Write ('test'); 
} 
+0

¿Es este el código completo, o es esa línea "+ = new ..." dentro de un tipo típico de bloque "si se recarga"? –

Respuesta

10

El código parece lo suficientemente simple para funcionar correctamente. La única razón por la que btnHandler es nulo podría deberse a que no se llama al código de registro de evento en la página aspx.

¿Hay una publicación? ¿Estás seguro de que estás agregando el evento CADA VEZ que carga la página?

ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler); 
+0

¡Sí! ese era el problema. Lo estaba llamando código witin (! IsPostBack). Una vez que coloqué el código afuera, comenzó a funcionar. Gracias chicos por todas sus respuestas. – jack

0

Parece que debería funcionar ... puede recorre el código en el depurador y ve cuál es el valor de ucStepHdr.btnHandler tan pronto como lo configura en Page_Load? (Solo un lado, tradicionalmente estos se configuran en init en lugar de cargar, pero este no es su problema.)

1

Si quita OnClick="imgstep1_Click" y poner esto en su ascx.cs

protected ImageButton imgstep1; 

protected override void OnInit(EventArgs e) 
{ 
    this.imgstep1.Click += new ImageClickEventHandler(imgstep1_Click); 
} 

¿Este método de cableado de seguridad de su trabajo evento?