2009-09-11 19 views
9

J'essaie de déclencher un événement click à partir du contrôle User et le gérer sur la page contenant. Le problème que j'ai, c'est quand je clique sur le bouton 'imgstep1' sur le contrôle de l'utilisateur, le code derrière les déclencheurs d'événements imgstep1_click et mais l'événement 'btnHandler' est toujours nul. Par conséquent, il n'appelle pas l'événement parent.EventHandler is null

Toute aide à ce sujet sera grandement appréciée.

Mon utilisateur Code commande est:

.ascx Code:

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

code .ascx.cs:

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

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

.aspx Code page:

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

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

Est-ce le code entier, ou est-ce que la ligne "+ = new ..." se trouve dans un type de bloc "if reload"? –

Répondre

10

Le code semble assez simple pour fonctionner correctement. La seule raison pour laquelle btnHandler est null pourrait être parce que le code d'enregistrement d'événement dans la page aspx n'est pas appelé.

Y a-t-il un message de retour? Etes-vous sûr que vous ajoutez l'événement CHAQUE FOIS la page charge ???

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

Oui! c'était le problème. Je l'appelais witin (! IsPostBack) code. Une fois que j'ai mis le code à l'extérieur, j'ai commencé à travailler. Merci les gars pour toutes vos réponses. – jack

0

On dirait que ça devrait marcher ... peut vous parcourez le code dans le débogueur, et voyez quelle est la valeur de ucStepHdr.btnHandler dès que vous l'avez défini dans Page_Load? (Juste à part, traditionnellement, ils sont définis dans init au lieu de charger, mais ce n'est pas votre problème.)

1

Si vous supprimez OnClick="imgstep1_Click" et que vous mettez dans votre ascx.cs

protected ImageButton imgstep1; 

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

Est-ce que cette méthode de câblage votre travail d'événement?