在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不能重复,否则会引发错误。