0

プロジェクトに を 2 セット追加しようとし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..ものを割り当てています。どうすればよいですか?

4

2 に答える 2

3

問題は、同じ ID を持つ 1 つのループ反復で 2 つのチェックボックスを作成していることです。それらが同じにある場合、ASP.NETでは許可されませんNamingContainerPanel実装されていません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);
于 2013-01-11T11:49:12.363 に答える
0

chck[i].ID = chck + Convert.ToString(i);ここでチェックし ないでくださいchck[i].ID = "chck" + Convert.ToString(i);

于 2013-01-11T11:59:34.233 に答える