关于asp.net中动态生成的表格和checkbox无法实现的问题

在asp.net的.cs文件中,我动态生成了一个表格,并在这个表格中动态添加了控件textbox,每一个都设置了id,为什么我建立的动态表格在前端可以显示,但是在后端为空(就是我判断了一下行数为0),checkbox也找不到,这是为什么呢?

这个是我生成的表格

protected void showItems(ShoppingCart sCart)
    {
        int tip = 0;
        ArrayList list = sCart.getItems();
        TableHeaderRow headerRow = new TableHeaderRow();
        TableHeaderCell allCheck = new TableHeaderCell();
        TableHeaderCell order = new TableHeaderCell();
        TableHeaderCell headerName = new TableHeaderCell();
        TableHeaderCell headerPrice = new TableHeaderCell();
        TableHeaderCell headerCount = new TableHeaderCell();
        TableHeaderCell headerAllCount = new TableHeaderCell();
        CheckBox all = new CheckBox(); //框
        allCheck.Controls.Add(all);
        all.Text = "全选";
        all.ID = "check"+tip.ToString();
        tip++;
        order.Text = "序号";
        headerName.Text = "商品名称";
        headerPrice.Text = "单价/元";
        headerCount.Text = "商品数量";
        headerAllCount.Text = "总价/元";
        headerRow.Cells.Add(allCheck);
        headerRow.Cells.Add(order);
        headerRow.Cells.Add(headerName);
        headerRow.Cells.Add(headerPrice);
        headerRow.Cells.Add(headerCount);
        headerRow.Cells.Add(headerAllCount);
        cartTable.Rows.Add(headerRow);


        foreach(ShoppingItem i in list)
        {
            TableRow row = new TableRow();

            CheckBox icheck = new CheckBox();
            TableCell check = new TableCell();
            TableCell sno = new TableCell();
            TableCell cname = new TableCell();
            TableCell cprice = new TableCell();
            TableCell ccount = new TableCell();
            TableCell allcount = new TableCell();

            //Button jian = new Button();  //按钮-
            //Button jia = new Button();  //按钮+
            TextBox num = new TextBox();
            Label sum = new Label();

            icheck.ID = "check"+tip.ToString();
            icheck.Checked = false;
            //icheck.CheckedChanged += new EventHandler(this.eventFunction);//eventFuntion是事件处理的函数
            tip++;

            sno.Text = (tip-1).ToString();
            cname.Text = i.name;
            cprice.Text = i.price.ToString();
            ////ccount.Text = i.number.ToString();
            //jian.Text = "-";
            //jian.ID = "jian" + tip.ToString();
            ////jian.Click += new EventHandler(this.jian_Click); //减少商品数量
            //jian.Attributes["onclick"] = "reduceCount(this,tip.ToString())";

            num.Text = i.number.ToString();
            num.Width = 45;

            //num.ID = "box"+tip.ToString();
            //jia.Text = "+";
            //jia.ID = "jia" + tip.ToString();

            //tip++;
            //ccount.Controls.Add(jian);
            ccount.Controls.Add(num);
            //ccount.Controls.Add(jia);
            sum.Text = (i.price * i.number).ToString();

            check.Controls.Add(icheck);
            allcount.Controls.Add(sum);

            row.Cells.Add(check);
            row.Cells.Add(sno);
            row.Cells.Add(cname);
            row.Cells.Add(cprice);
            row.Cells.Add(ccount);
            row.Cells.Add(allcount);

            cartTable.Rows.Add(row);
            Session["table"] = cartTable;
            cart = (Table)Session["table"];
        }

    }

这一段是运用checkbox的地方
其中,cart是:cart = (Table)Session["table"];动态生成的表格中,每行的第一列是textbox

for (int i = 1; i < cart.Rows.Count - 1; i++)
            {
                if ((cart.Rows[i].FindControl((i - 1).ToString()) as CheckBox).Checked==true)
                {
                    test.Text += cart.Rows[i].Cells[1].Text.ToString() + "<br/>";
                    //sCart.delete((i - 1).ToString());
                }
            }

参考GPT和自己的思路:

从你提供的代码来看,你在生成动态表格后,将它存储在了Session中。但是在后台取出这个表格的时候,你直接从Session中取出,而没有再次动态生成。所以,当你去寻找其中的控件时,找不到它们。所以你需要在后台再次动态生成这个表格,并给每个控件指定正确的ID。在这个过程中,你应该确保生成的控件ID不能重复,否则会引发错误。