简体   繁体   中英

add a button click event dynamically in asp.net 4.5 c#

I have some questions to this post [1]: How can i create dynamic button click event on dynamic button?

The solution is not working for me, I created dynamically an Button, which is inside in an asp:table controller.

I have try to save my dynamic elements in an Session, and allocate the Session value to the object in the Page_Load, but this is not working.

Some ideas

edit:

        ...
        Button button = new Button();
        button.ID = "BtnTag";
        button.Text = "Tag generieren";
        button.Click += button_TagGenerieren;

        tabellenZelle.Controls.Add(button);
        Session["table"] = table;
    }

    public void button_TagGenerieren(object sender, EventArgs e)
    {
        TableRowCollection tabellenZeilen = qvTabelle.Rows;
        for (int i = 0; i < tabellenZeilen.Count; i++)
        {
            ...
        }
    }

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {

            if (Session["table"] != null)
            {
                table = (Table) Session["table"];
                Session["table"] = null;
             }
        }
    }

It is not a good practice to store every control into Session state.

Only problem I found is you need to reload the controls with same Id, when the page is posted back to server. Otherwise, those controls will be null.

<asp:PlaceHolder runat="server" ID="PlaceHolder1" />
<asp:Label runat="server" ID="Label1"/>

protected void Page_Load(object sender, EventArgs e)
{
    LoadControls();
}

private void LoadControls()
{
    var button = new Button {ID = "BtnTag", Text = "Tag generieren"};
    button.Click += button_Click;
    PlaceHolder1.Controls.Add(button);
}

private void button_Click(object sender, EventArgs e)
{
    Label1.Text = "BtnTag button is clicked";
}

Note: If you do not know the button's id (which is generated dynamically at run time), you want to save those ids in ViewState like this - https://stackoverflow.com/a/14449305/296861

The problem lies in the moment at which te button and it's event are created in the pagelifecycle. Try the page_init event for this.

Create Button in page load

            Button btn = new Button();
            btn.Text = "Dynamic";
            btn.Click += new EventHandler(btnClick);
            PlaceHolder1.Controls.Add(btn)

Button Click Event

protected void btnClick(object sender, EventArgs e)
{
  // Coding to click event
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM