使用c#在asp.net中动态添加复选框?

时间:2013-01-11 11:43:32

标签: c# asp.net dynamic-controls

我正在尝试在 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();

    }
}

问题是我收到了这样的错误页面:

enter image description here

它的说法:

Multiple controls with the same ID 'System.Web.UI.WebControls.CheckBox[]0' were found. FindControl requires that controls have unique IDs.

但我正在分配不同的ids..我该怎么办?

2 个答案:

答案 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);