简体   繁体   中英

Dynamic Button not triggered in ASP.Net from static class

I am trying to make a dynamic table which has a couple of rows and the last row is a plus button, which will add a new row. (I will only describe the important information, to keep it simple.)

I thought of this way to accomplish it:

// .aspx code 
<li><asp:LinkButton ID="LM_Show" runat="server" Text="Show list" OnClick="Action"/></li>
<asp:PlaceHolder ID="infoTable" runat="server"></asp:PlaceHolder>

//CreateTable function
public void Clicked(object sender, EventArgs e){
    table();
}
public void table() {
    //Do stuff...

    //Screen variable is keeping track of which screen should be shown in .aspx
    infoTable.Controls.Add(CreateView.createTable<Employee>(screen, this.Context, table));
}

//Create the actual table 
public static Table createTable<T>(Screen screen, HttpContext context, Action method) where T : new() {
    //New table and make it stretch
    Table tb = new Table();
    tb.Width = Unit.Percentage(100);
    tb.Height = Unit.Percentage(100);

    //Gather list from session
    List<T> items = (List<T>)context.Session["list"];

    //Create table content based on the list
    for (int i = 1; i <= items.Count(); i++) {
        TableRow tr = new TableRow();

       //Foreach property create cells with content according to the property
       //Add these cells to the row

        tb.Rows.Add(tr);
    }

    //Create 1 final row which has a button to be able to add 1 row
    TableRow tr2 = new TableRow();
    TableCell tc = new TableCell();
    tr.Cells.Add(tc);

    //Create the Button
    Button button = new Button();
    button.Text = "+";

    //!!This is not getting triggered!!//
    button.Click += (s, e) => { 
        List<T> tempItems = (List<T>)context.Session["list"]; 
        tempItems.Add(new T()); 
        context.Session["list"] = tempItems; 
        //When a button is pressed, it gives a postback.
        //The table has to be rebuild over again with the newly added item
        method(); 
    };
    //!!This is not getting triggered!!//

    //Add the button
    tr2.Cells[0].Controls.Add(button);
    tb.Rows.Add(tr2);

    return tb;
}

Any comments about the code or how to accomplish it even better are also very welcome.

This could be achieved more easily if you used jQuery AJAX and communicate with a web service/method to get the data. However, it can be achieved in C# as well. Assuming that the given below part of the code is not working,

//Add the button
tr2.Cells[0].Controls.Add(button);
tb.Rows.Add(tr2);

You can try adding button to tc first, and then add tc to the row tr

tc.Controls.Add(button);
tr2.Cells.Add(tc);
tb.Rows.Add(tr2);

Good Luck!

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