2009-09-11 5 views
9

Ich versuche, ein Klickereignis von Benutzersteuerelement auszulösen und es auf der enthaltenden Seite zu behandeln. Das Problem, das ich habe, ist, wenn ich den Knopf 'imgstep1' auf dem Benutzersteuerelement klicke, der Code hinter imgstep1_click Ereignis auslöst und das 'btnHandler' Ereignis ist immer Null. Daher wird das Elternereignis nicht aufgerufen.EventHandler ist null

Jede Hilfe zu diesem wird sehr geschätzt.

My User Control Code ist:

.ascx Code:

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

.ascx.cs Code:

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

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

ASPX-Seite Code:

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

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

Ist dies der gesamte Code, oder ist das "+ = new ..." Zeile in einem typischen "if Reload" Typ von Block? –

Antwort

10

Der Code sieht einfach genug aus, um richtig zu funktionieren. Der einzige Grund dafür, dass btnHandler null ist, könnte sein, dass der Ereignisregistrierungscode in der aspx-Seite nicht aufgerufen wird.

Gibt es einen Post zurück? Sind Sie sicher, dass Sie das Ereignis JEDES ZEITPUNKT der Seite hinzufügen ???

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

Ja! Das war das Problem. Ich nannte es mit (! IsPostBack) -Code. Sobald ich den Code draußen gestellt habe, hat er angefangen zu arbeiten. Danke Jungs für alle Ihre Antworten. – jack

0

Es sieht so aus als müsste es funktionieren ... kann Sie durchlaufen den Code im Debugger und sehen, was der Wert von ucStepHdr.btnHandler ist, sobald Sie ihn in Page_Load setzen? (Nur eine Seite, traditionell sind diese in init gesetzt, anstatt zu laden, aber das ist nicht dein Problem.)

1

Wenn Sie OnClick="imgstep1_Click" entfernen und setzen Sie diese in Ihrem ascx.cs

protected ImageButton imgstep1; 

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

Ist diese Art der Verdrahtung auf Ihren Event Arbeit?