加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET找到了具有相同ID“x”的多个控件.的FindControl

发布时间:2020-12-16 07:07:26 所属栏目:asp.Net 来源:网络整理
导读:得到以下错误 找到具有相同ID“ltlItemCode”的多个控件. FindControl要求控件具有唯一ID. 在页面加载时不会发生此错误,但是当我更改具有AutoPostBack =“true”的下拉列表的值时. 代码是 //Number of Services numberofServices = Int32.Parse(DCCFunctions
得到以下错误

找到具有相同ID“ltlItemCode”的多个控件. FindControl要求控件具有唯一ID.

在页面加载时不会发生此错误,但是当我更改具有AutoPostBack =“true”的下拉列表的值时.

代码是

//Number of Services
    numberofServices = Int32.Parse(DCCFunctions.GetNumServicesPerRoom(roomId.ToString()));
    additionalServices = new UserControls_AdditionalService[numberofServices - 1];

    String htmlTable = String.Empty;
    Int32 cell = 1;
    Int32 rows = numberofServices;
    Int32 cols = 4;


    TableHeaderRow h = new TableHeaderRow();
    TableHeaderCell hc1 = new TableHeaderCell();
    hc1.Text = "Item Description";
    h.Cells.Add(hc1);
    TableHeaderCell hc2 = new TableHeaderCell();
    hc2.Text = "Item Price";
    h.Cells.Add(hc2);
    TableHeaderCell hc3 = new TableHeaderCell();
    hc3.Text = "Item Quantity";
    h.Cells.Add(hc3);
    TableHeaderCell hc4 = new TableHeaderCell();
    hc4.Text = "Item Sub Total";
    h.Cells.Add(hc4);
    Table1.Rows.Add(h);

    // Open database connection
    DBConnection conn = new DBConnection();

    // Retrieve details
    SqlCommand sqlGetDetails = conn.SetStoredProcedure("spGetAdditionalServicesDetails");
    DBConnection.AddNewParameter(sqlGetDetails,"@roomId",ParameterDirection.Input,SqlDbType.Int,roomId);

    try
    {
        conn.Open();

        SqlDataReader reader_list = sqlGetDetails.ExecuteReader();
        if (reader_list.HasRows)
        {
            while (reader_list.Read())
            {
                //returnVal = reader_list["Num"].ToString();
                htmlTable += "<tr>" + Environment.NewLine;
                TableRow r = new TableRow();

                additionalServices[cell - 1] = (ASP.usercontrols_additionalservice_ascx)LoadControl("~/UserControls/AdditionalService.ascx");

                Literal ItemCode = (Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal;
                ItemCode.Text = reader_list["itemDescription"].ToString();


                Literal ItemPrice = (Literal)additionalServices[cell - 1].FindControl("ltlItemPrice") as Literal;
                ItemPrice.Text = "€" + reader_list["unitPrice"].ToString();

                Literal ItemTotal = (Literal)additionalServices[cell - 1].FindControl("ltlTotalPrice") as Literal;
                ItemTotal.Text = "€" + "0";

                TableCell ItemCodeCell = new TableCell();
                ItemCodeCell.Controls.Add((Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal);

                TableCell ItemCodePriceCell = new TableCell();
                ItemCodePriceCell.Controls.Add((Literal)additionalServices[cell - 1].FindControl("ltlItemPrice") as Literal);

                TableCell ItemCodeTotalCell = new TableCell();
                ItemCodeTotalCell.Controls.Add((Literal)additionalServices[cell - 1].FindControl("ltlTotalPrice") as Literal);

                TableCell c = new TableCell();
                DropDownList qtyList = (DropDownList)additionalServices[cell - 1].FindControl("qtyList") as DropDownList;
                qtyList.Items.Add(new System.Web.UI.WebControls.ListItem("Select Quantity...","0"));
                qtyList.DataBind();

                for (Int32 count = 1; count < 101; count++)
                {
                    qtyList.Items.Add(new System.Web.UI.WebControls.ListItem(count.ToString(),count.ToString()));
                }
                //c.ColumnSpan = 5;
                c.Controls.Add((DropDownList)additionalServices[cell - 1].FindControl("qtyList") as DropDownList);


                r.Cells.Add(ItemCodeCell);
                r.Cells.Add(ItemCodePriceCell);
                r.Cells.Add(c);
                r.Cells.Add(ItemCodeTotalCell);
                //r.Controls.Add(additionalServices[cell - 1]);
                //cell += 1;

                // Add the row
                Table1.Rows.Add(r);
            }
        }
        reader_list.Close();
    }
    catch (Exception ex)
    {
        M1Utils.ErrorHandler(ex);
    }
    finally
    {
        conn.Close();
    }`

解决方法

ItemCodeCell.Controls.Add((Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal);

我猜这是问题,看起来你一遍又一遍地添加相同的控件,但我不确定.尝试更改新添加的Literal的.ID.

此外,我以前从未使用过“EnsureID()”,但它似乎有所帮助.有点像

Literal duplicateLiteral = (Literal)additionalServices[cell - 1].FindControl("ltlItemCode") as Literal;
duplicateLiteral.EnsureID();
ItemCodeCell.Controls.Add(duplicateLiteral);

这可能不起作用,因为看起来它会一遍又一遍地插入duplicateLiteral的相同副本,但是,我不确定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读