none
Click su Button dinamico RRS feed

  • Domanda

  • Ciao,

    una volta generato un Button dinamicamente in ASP.NET, aggiungo l'evento Click collegato ad una funzione sullo stesso Button:

    Button button2 = new Button();         

    button2.Text = "Dynamic";
    button2.Click += new EventHandler(but_Click);

            
            void but_Click(object sender, EventArgs e)
            {
                TextBox1.Text = "OK";
            }

    la rispettiva funzione "but_Click" non viene eseguita al click sul Button2 generato e lo stesso scompare dopo il click.

    E' corretto il codice riportato?


    • Modificato joesef domenica 19 gennaio 2020 18:33 precisazione
    sabato 18 gennaio 2020 23:08

Risposte


  • Ho comunque notato che se il codice della funzione: 

    protected void Button1_Click(object sender, EventArgs e) 

    lo inserisco in:

    protected void Page_Load(object sender, EventArgs e)

    l'evento  void But_Click(object sender, EventArgs e) viene eseguito correttamente al click su button2 (dinamico) e lo stesso button2 non scompare dopo il click.

                                   

    E' normale perchè l'evento But_Click provoca un postback e quindi il button2 "scompare" giustamente.

    Dato che il button2 viene popolato solo all'evento But_Click, al ricaricamento della pagina (provocato dal postback) il button non viene aggiunto alla pagina.


    Paolo Pranzo

    lunedì 27 gennaio 2020 09:41

Tutte le risposte

  • Ciao Joesef,
    una istruzione che noto che manca è l'aggiunta dell'oggetto Button alla webform.

    form1.Controls.Add(button2);


    Paolo Pranzo

    lunedì 20 gennaio 2020 09:17
  • Buongiorno Joesef, 

    Ha risolto il problema?


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 21 gennaio 2020 10:45
    Moderatore
  • Non funziona neppure così;

    in realtà io ho inserito button2 in un Panel:

    Button button2 = new Button();         

    button2.Text = "Dynamic";

    Panel1.Controls.Add(button2);

    button2.Click += new EventHandler(but_Click);

            

            void but_Click(object sender, EventArgs e)
            {
                TextBox1.Text = "OK";
            }

    button2 viene inserito in Panel1, è l'evento but_Click che non esegue la funzione.

    mercoledì 22 gennaio 2020 20:26
  • Quando si creano controlli al volo, non vengono archiviati nel viewstate, quindi quando si attiva un postback con uno di questi controlli, ASP.NET non sa cosa fare perché tali elementi vengono ricreati automaticamente al caricamento della pagina. Pertanto, gli eventi non ci sono più. Assicurati di creare questi pulsanti anche quando pubblichi post.

    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    giovedì 23 gennaio 2020 09:35
    Moderatore

  • button2 viene inserito in Panel1, è l'evento but_Click che non esegue la funzione.

    Oltre a quanto suggerito da Yordan,
    avvia la pagina col debug mettendo un breakpoint all'evento e vedi se viene eseguito.
    Ma la textbox è sempre nel panel?
     

    Paolo Pranzo

    giovedì 23 gennaio 2020 11:37
  • La TextBox non è nel Panel, ma se la metto nel Panel il risultato non cambia.

    Mettendo un breakpoint all'evento vedo che l'evento non viene eseguito.

    giovedì 23 gennaio 2020 22:06
  • Potresti condividere tutto il codice del file .aspx.cs?

    Paolo Pranzo

    venerdì 24 gennaio 2020 08:07
  • Il codice precedentemente postato viene eseguito al click di button1 (non dinamico):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Drawing;

    namespace Asp
    {
        public partial class Button2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                
            }
          
            protected void Button1_Click(object sender, EventArgs e)
            {
               
                 Button button2 = new Button();
            
                 button2.Text = "Dynamic";
               

                Panel1.Controls.Add(button2);

                button2.Click += new EventHandler(But_Click);

            }

            void But_Click(object sender, EventArgs e)
            {

                    TextBox1.Text = "OK";

            }
        }
    }

    Ho comunque notato che se il codice della funzione: 

    protected void Button1_Click(object sender, EventArgs e) 

    lo inserisco in:

    protected void Page_Load(object sender, EventArgs e)

    l'evento  void But_Click(object sender, EventArgs e) viene eseguito correttamente al click su button2 (dinamico) e lo stesso button2 non scompare dopo il click.

                                   
    venerdì 24 gennaio 2020 20:26

  • Ho comunque notato che se il codice della funzione: 

    protected void Button1_Click(object sender, EventArgs e) 

    lo inserisco in:

    protected void Page_Load(object sender, EventArgs e)

    l'evento  void But_Click(object sender, EventArgs e) viene eseguito correttamente al click su button2 (dinamico) e lo stesso button2 non scompare dopo il click.

                                   

    E' normale perchè l'evento But_Click provoca un postback e quindi il button2 "scompare" giustamente.

    Dato che il button2 viene popolato solo all'evento But_Click, al ricaricamento della pagina (provocato dal postback) il button non viene aggiunto alla pagina.


    Paolo Pranzo

    lunedì 27 gennaio 2020 09:41