public partial class Table_Traversing : System.Web.UI.Page
{
Table table1 = new Table();
Button button1 = new Button();
protected void Page_Load(object sender, EventArgs e)
{
for (int adding_rows = 0; adding_rows < 4; adding_rows++)
{
TableRow table_row1 = new TableRow();
TableCell table_cell1 = new TableCell();
TableCell table_cell2 = new TableCell();
Label The_text = new Label();
CheckBox checkmate = new CheckBox();
The_text.Text = "This is the text :-)";
checkmate.ID = "checkmate";
table_cell2.Controls.Add(checkmate);
table_cell1.Controls.Add(The_text);
table_row1.Controls.AddAt(0, table_cell1);
table_row1.Controls.AddAt(1, table_cell2);
table1.Rows.Add(table_row1);
}
button1.Text = "click me to export the value";
form1.Controls.AddAt(0, table1);
form1.Controls.AddAt(1, button1);
button1.Click += new EventHandler(button1_Click);
}
void button1_Click(object sender, EventArgs e)
{
CheckBox check_or_not = new CheckBox();
for (int i = 0; i < table1.Rows.Count; i++)
{
check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate");
Response.Write(check_or_not.Checked.ToString());
}
}
}
找到具有相同ID'将死'的多个控件。 FindControl要求控件具有唯一ID。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Web.HttpException:找到具有相同ID“checkmate”的多个控件。 FindControl要求控件具有唯一ID。
答案 0 :(得分:2)
只需将行号附加到ID:
checkmate.ID = "checkmate" + adding_rows.ToString();
当然,也可以将它附加到FindControl参数:
check_or_not = (CheckBox)table1.Rows[i].FindControl("checkmate" + i.ToString());
答案 1 :(得分:0)
您已将复选框添加到单元格,而不是行:
table_cell2.Controls.Add(checkmate);
因此 - 一行有多个id为“checkmate”的单元格:
E.g
<tr id="somerow">
<td><input type="checkbox" id="checkmate"/></td>
<td><input type="checkbox" id="checkmate"/></td>
</tr>
因此,在“somerow”行中,有多个ID为“checkmate”的复选框。
您添加复选框的代码看起来似乎只是添加了一个 - 所以它一定是您错过的。
尝试删除FindControl代码并查看实际HTML呈现的内容。