none
[ASP.NET & Ajax] Postback asynchrone et event Click non géré RRS feed

  • 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" Smile

    mardi 10 juillet 2007 15:05

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 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);
    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 Snippet

    string 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


    mardi 10 juillet 2007 16:12

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 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);
    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 Snippet

    string 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


    mardi 10 juillet 2007 16:12
  • bonjour, dit moi tu n'aurai pas perdu le handles ??

    protected void Timer1_Tick(object sender, EventArgs e) Handles Timer1.Tick



    mardi 25 septembre 2007 15:07
  •  

    Si je codais en VB.net probablement mais vu que je code en C# ce n'est pas le cas.

    mardi 25 septembre 2007 16:48