我正在尝试在 checkboxes
项目中添加两组asp.net
。在那里我这样做:
:
public static CheckBox[] chck = new CheckBox[100];
public static CheckBox[] chckbx = new CheckBox[100];
我有一个功能:
public void generatecheckbox1()
{
for (int i = 0; i < 99; i++)
{
chck[i] = new CheckBox();
chck[i].ID = chck + Convert.ToString(i);
chck[i].Text = chck + Convert.ToString(i);
pnlcom1.Controls.Add(chck[i]);
pnlcom1.Controls.Add(new LiteralControl("<br />"));
chckbx[i] = new CheckBox();
chckbx[i].ID = chckbx + Convert.ToString(i);
chckbx[i].Text = chckbx + Convert.ToString(i);
pnlcom2.Controls.Add(chckbx[i]);
pnlcom2.Controls.Add(new LiteralControl("<br />"));
}
}
我在这里调用这个函数:
protected void ddluserwebser_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddluserwebser.SelectedItem.Text == "Custom")
{
generatecheckbox1();
}
}
问题是我收到了这样的错误页面:
它的说法:
Multiple controls with the same ID 'System.Web.UI.WebControls.CheckBox[]0' were found. FindControl requires that controls have unique IDs.
但我正在分配不同的ids..
我该怎么办?
答案 0 :(得分:3)
问题是你在一个具有相同id的循环迭代中创建了两个复选框。当ASP.NET处于同一个NamingContainer
时,{} Panel
没有实现INamingContainer
,这是不允许的。
所以改成它(注意string.Format
部分):
for (int i = 0; i < 99; i++)
{
chck[i] = new CheckBox();
chck[i].ID = string.Format("chk_1_{0}", i);
chck[i].Text = chck + Convert.ToString(i);
pnlcom1.Controls.Add(chck[i]);
pnlcom1.Controls.Add(new LiteralControl("<br />"));
chckbx[i] = new CheckBox();
chck[i].ID = string.Format("chk_2_{0}", i);
chckbx[i].Text = chckbx + Convert.ToString(i);
pnlcom2.Controls.Add(chckbx[i]);
pnlcom2.Controls.Add(new LiteralControl("<br />"));
}
您还使用了CheckBox[]
来构建您的ID
chckbx + Convert.ToString(i);
这似乎是因为Type
+ string
=类型+字符串的名称,但看起来像:
"System.Windows.Forms.CheckBox[]99"
所以只需使用上面的代码
string.Format("chk_1_{0}", i);
答案 1 :(得分:0)
这里不需要chck[i].ID = chck + Convert.ToString(i);
chck[i].ID = "chck" + Convert.ToString(i);