【问题标题】:Multiple controls with the same ID 'ddl_Weight' were found. FindControl requires that controls have unique IDs找到具有相同 ID 'ddl_Weight' 的多个控件。 FindControl 要求控件具有唯一的 ID
【发布时间】:2014-05-20 11:23:45
【问题描述】:

我遇到了这个错误:找到了具有相同 ID 'ddl_Weight' 的多个控件。 Find-control 要求控件具有唯一的 ID。因此我不添加添加更客观的文本框,下拉列表。 我必须添加目标、权重和实现的下拉列表。

private List<DropDownList> inputDropDownList;
    private List<DropDownList> inputDropDownList2;

    protected void btn_AddObjectives_Click(object sender, EventArgs e)
    {
        int rowCount = 0;

        //initialize a session.
        rowCount = Convert.ToInt32(Session["clicks"]);

        rowCount++;

        //In each button click save the numbers into the session.
        Session["clicks"] = rowCount;


        //Create the textboxes and labels each time the button is clicked.
        for (int i = 0; i < rowCount; i++)
        {

            TextBox TxtBoxO = new TextBox();
            TxtBoxO.TextMode = TextBoxMode.MultiLine;
            DropDownList DDLW = new DropDownList();
            DropDownList DDLA = new DropDownList();
            inputDropDownList = new List<DropDownList>();
            inputDropDownList2 = new List<DropDownList>();

            Label lblO = new Label();
            Label lblW = new Label();
            Label lblA = new Label();

            TxtBoxO.ID = "TextBoxO" + i.ToString();
            DDLW.ID = "DDLW" + i.ToString();
            DDLA.ID = "DDLA" + i.ToString();

            inputDropDownList.Add(DDLW);
            inputDropDownList2.Add(DDLA);

            TxtBoxO.Width = 325;
            DDLW.Height = 25;
            DDLA.Height = 25;


            DDLA.ID = "ddl_Achieved";
            DDLA.Items.Add("Select");
            DDLA.Items.Add("5");
            DDLA.Items.Add("10");
            DDLA.Items.Add("15");
            DDLA.Items.Add("20");
            DDLA.Items.Add("25");
            DDLA.Items.Add("30");
            DDLA.Items.Add("35");
            DDLA.Items.Add("40");
            DDLA.Items.Add("45");
            DDLA.Items.Add("50");
            DDLA.Items.Add("55");
            DDLA.Items.Add("60");
            DDLA.Items.Add("65");
            DDLA.Items.Add("70");
            DDLA.Items.Add("75");
            DDLA.Items.Add("80");
            DDLA.Items.Add("85");
            DDLA.Items.Add("90");
            DDLA.Items.Add("95");
            DDLA.Items.Add("100");

            DDLW.ID = "ddl_Weight"; 
            DDLW.Items.Add("Select");
            DDLW.Items.Add("5");
            DDLW.Items.Add("10");
            DDLW.Items.Add("15");
            DDLW.Items.Add("20");
            DDLW.Items.Add("25");
            DDLW.Items.Add("30");
            DDLW.Items.Add("35");
            DDLW.Items.Add("40");
            DDLW.Items.Add("45");
            DDLW.Items.Add("50");
            DDLW.Items.Add("55");
            DDLW.Items.Add("60");
            DDLW.Items.Add("65");
            DDLW.Items.Add("70");
            DDLW.Items.Add("75");
            DDLW.Items.Add("80");
            DDLW.Items.Add("85");
            DDLW.Items.Add("90");
            DDLW.Items.Add("95");
            DDLW.Items.Add("100");

            lblO.ID = "LabelO" + i.ToString();
            lblW.Text = "LabelW" + i.ToString();
            lblA.ID = "LabelA" + i.ToString();

            lblO.Text = "Objective " + " " + (i + 1).ToString() + " : ";
            lblW.Text = " Weightage" + " " + (i + 1).ToString() + " : ";
            lblA.Text = " Achieved " + " " + (i + 1).ToString() + " : ";


            //Add the labels and textboxes to the Panel.
            Panel1.Controls.Add(lblO);
            Panel1.Controls.Add(TxtBoxO);

            Panel1.Controls.Add(lblW);
            Panel1.Controls.Add(DDLW);

            Panel1.Controls.Add(lblA);
            Panel1.Controls.Add(DDLA);
        }

【问题讨论】:

    标签: c# asp.net sql


    【解决方案1】:

    错误很明显。您正在添加具有相同 ID 的多个控件,这是不允许的。请注意,您处于循环中:

    for (int i = 0; i < rowCount; i++)
    

    我们假设rowCount 大于1,并且循环迭代不止一次。在该循环中,您可以创建控件:

    DropDownList DDLW = new DropDownList();
    DropDownList DDLA = new DropDownList();
    

    然后您为它们分配 ID:

    DDLW.ID = "DDLW" + i.ToString();
    DDLA.ID = "DDLA" + i.ToString();
    

    这些 ID 可能是唯一的。但是你用不唯一的覆盖它们:

    DDLA.ID = "ddl_Achieved";
    DDLW.ID = "ddl_Weight";
    

    然后你将它们添加到页面中:

    Panel1.Controls.Add(DDLW);
    Panel1.Controls.Add(DDLA);
    

    顾名思义,ID 的目的是唯一标识一个对象。就像 HTML 中的 id 属性一样,如果您在一个页面中多次重复使用同一个属性,那么行为将变得未定义。系统(在这种情况下,无论您使用 FindControl())都期望有 0 或 1 个元素具有任何给定的 ID 值。您创建了超过 1 个,这是无效的。

    您可以只删除设置非唯一 ID 的行并保留设置唯一 ID 的行。

    【讨论】:

    • 知道了,你说的我明白了。谢谢大卫
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    相关资源
    最近更新 更多