2009-09-11 9 views
9

Sto tentando di generare un evento click da Controllo utente e gestirlo nella pagina contenente. Il problema che ho è, quando faccio clic sul pulsante 'imgstep1' sul controllo utente, il codice dietro i trigger di evento imgstep1_click e l'evento 'btnHandler' è sempre nullo. Quindi non chiama l'evento genitore.EventHandler è nullo

Qualsiasi aiuto su questo sarà molto apprezzato.

mio codice di controllo Utente:

.ascx codice:

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

codice .ascx.cs:

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

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

aspx codice della pagina:

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

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

È l'intero codice o è la riga "+ = nuovo ..." all'interno di un tipico tipo di blocco "se ricaricato"? –

risposta

10

Il codice sembra abbastanza semplice da funzionare correttamente. L'unica ragione per cui btnHandler è nullo potrebbe essere perché il codice di registrazione dell'evento nella pagina aspx non viene chiamato.

C'è un post? Sei sicuro di voler aggiungere l'evento OGNI VOLTA che la pagina viene caricata ???

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

Sì! quello era il problema Lo stavo chiamando witin (! IsPostBack) codice. Una volta messo il codice all'esterno, ha iniziato a funzionare. Grazie ragazzi per tutte le vostre risposte. – jack

0

Sembra che dovrebbe funzionare ... può passi nel codice del debugger e vedi quale valore di ucStepHdr.btnHandler è appena impostato in Page_Load? (Solo a parte, tradizionalmente questi sono impostati in init anziché caricati, ma questo non è il tuo problema.)

1

Se si rimuove OnClick="imgstep1_Click" e mettere questo nel vostro ascx.cs

protected ImageButton imgstep1; 

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

Fa questo metodo di cablaggio il vostro lavoro evento?