Meilleur auteur de réponses
[ASP.NET & Ajax] Postback asynchrone et event Click non géré

Question
-
Bonjour,
Je cherche depuis quelque temps mais je n'arrive pas à trouver une solution à mon problème.
Je n'arrive pas à récupérer l'évenement Click d'un bouton, lorsque ce dernier a été rajouté dynameiquement dans un UpdatePanel
Pour faire simple :
Si je prends une page vierge, je rajoute:
- un ScriptManager
- un UpdatePanel
- un Timer dans l'UpdatePanel rajouté précédement.
- un Panel simple (Panel1) dans l'UpdatePanel rajouté précédement
Sur l'événement Tick de mon timer je rajoute un boutton dans mon Panel1.
Code Snippet
protected void Timer1_Tick(object sender, EventArgs e)
{
Button button = new Button();
button.Text = "Program";
button.ID = "test";
button.Click += new EventHandler(button_Click);
ScriptManager1.RegisterPostBackControl(button);
Panel1.Controls.Add(button);
}
void button_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
}
Suelement voilà, lorsque je clique sur mon bouton "Program" et si je mets un point d'arrêt dans ma fonction _Click, impossible de passer dedans...
Est-ce que je passe à côté de quelque chose ?
Merci d'avance pour les réponses.
PS: je réponds d'avance à la question : "oui je suis obligé d'avoir le bouton dans l'UpdatePanel"
Réponses
-
Bon, je n'ai pas vraiment trouvé la raison du "pourquoi et du comment" mais j'ai trouvé un moyen de contourner ce problème:
j'ai modifié la façon dont est créé mon bouton.
Code Snippetprotected void Timer1_Tick(object sender, EventArgs e)
{
Button button = new Button();
button.Text = "Program";
button.ID = "test";
button.Click += new EventHandler(button_Click);
PostBackTrigger trig = new PostBackTrigger();
trig.ControlID = "test";
UpdatePanel1.Triggers.Add(trig);
Panel1.Controls.Add(button);
}
Ensuite dans le Page_Load j'effectue le test suivant:
Code Snippetstring test = Request[ScriptManager.GetCurrent(this).ID];
if (test != null && test.Contains("test"))
{
//traitement
}
sachant que test vaudra : "UpdatePanel1|test"
Dans le cas où j'aurais plusieurs boutons créés dynamiquement (ce qui est le cas dans mon véritable site) je peux parser l'ID et effectuer le traitement en fonction.
Toujours est-il que si qqu'un sait pourquoi je ne passe pas dans le _Click je suis preneur.
Merci d'avance
Toutes les réponses
-
Bon, je n'ai pas vraiment trouvé la raison du "pourquoi et du comment" mais j'ai trouvé un moyen de contourner ce problème:
j'ai modifié la façon dont est créé mon bouton.
Code Snippetprotected void Timer1_Tick(object sender, EventArgs e)
{
Button button = new Button();
button.Text = "Program";
button.ID = "test";
button.Click += new EventHandler(button_Click);
PostBackTrigger trig = new PostBackTrigger();
trig.ControlID = "test";
UpdatePanel1.Triggers.Add(trig);
Panel1.Controls.Add(button);
}
Ensuite dans le Page_Load j'effectue le test suivant:
Code Snippetstring test = Request[ScriptManager.GetCurrent(this).ID];
if (test != null && test.Contains("test"))
{
//traitement
}
sachant que test vaudra : "UpdatePanel1|test"
Dans le cas où j'aurais plusieurs boutons créés dynamiquement (ce qui est le cas dans mon véritable site) je peux parser l'ID et effectuer le traitement en fonction.
Toujours est-il que si qqu'un sait pourquoi je ne passe pas dans le _Click je suis preneur.
Merci d'avance -
-