无法访问动态创建的控件

时间:2014-01-10 09:36:53

标签: c# asp.net

在我的网站中,我可以使用 UPDATE PANEL 控件动态创建控件(文本框下拉列表) 。但我无法访问这些控件。即使在调试期间在浏览器中查看源代码时,也不会出现动态创建的控件!我想知道为什么我们能够看到动态创建的控件,而它们的定义在o / p的源视图中不存在。你能清楚我的怀疑吗?非常感谢。

代码:

      <div id="divAssociatedInc">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel11" runat="server">
        <ContentTemplate>
            <%--<asp:UpdatePanel ID="updPnlAssociatedInc" runat="server" UpdateMode="Conditional">
                                                <ContentTemplate>--%>
            <asp:Label ID="lblcount" runat="server" Text="1" Visible="false"></asp:Label>
            <asp:Table ID="someTBL" runat="server" Style="width: 100%">
                <asp:TableRow>
                    <asp:TableCell HorizontalAlign="right" Style="width: 200px">
                        <asp:Label ID="lblAssociatedIncNo" runat="server" Text="Associated Incident(s)# :"></asp:Label><font
                            face="verdana" color="red" size="1"></font>

                        <div>
                            <asp:Button runat="server" ID="BtnAddAssoInc" OnClick="btnAddNewRowAssocInc_Click"
                                Text="Add Associated Incidents" />

                        </div>
                    </asp:TableCell>
                    <asp:TableCell HorizontalAlign="left" Style="width: 320px;">
                        <asp:TextBox ID="txtAssocIncRec0" name = "txtAssoc0" runat="server" MaxLength="12"></asp:TextBox>
                    </asp:TableCell>
                    <asp:TableCell HorizontalAlign="right" Style="width: 200px">
                        <asp:Label ID="lblAssociatedSeverity" runat="server" Text="Severity :"></asp:Label><font
                            face="verdana" color="red" size="1"></font>
                    </asp:TableCell>
                    <asp:TableCell HorizontalAlign="left" Style="width: 320px;">
                        <asp:DropDownList ID="ddlbAssocIncRec0" name="ddlbAssoc0" runat="server">
                        </asp:DropDownList>
                    </asp:TableCell>
                </asp:TableRow>

            </asp:Table>
        </ContentTemplate>
    </asp:UpdatePanel>

</div>

后面的相应代码是

        protected void Page_Load(object sender, EventArgs e)
    {
        int intRowCount = Convert.ToInt32(ViewState["No_of_Rows"]);
        for (int i = 1; i <= intRowCount; i++)
        {
            TableRow row = new TableRow();
            TableCell cell1 = new TableCell();
            TableCell cell2 = new TableCell();
            TableCell cell3 = new TableCell();
            TableCell cell4 = new TableCell();
            TextBox tb = new TextBox();
            DropDownList ddl = new DropDownList();
            Label lbl1 = new Label();
            Label lbl2 = new Label();

            row.ID = "rwAssocIncRec" + i;

            cell1.ID = "cAssocIncRec" + i + "1";
            cell2.ID = "cAssocIncRec" + i + "2";
            cell3.ID = "cAssocIncRec" + i + "3";
            cell4.ID = "cAssocIncRec" + i + "4";
            cell2.Attributes.Add("align", "left");
            cell4.Attributes.Add("align", "left");


            tb.ID = "txtAssocIncRec" + i;
            tb.MaxLength = 12;
            tb.EnableViewState = true;

            lbl1.ID = "lblAssocIncRec" + i + "01";
            lbl2.ID = "lblAssocIncRec" + i + "02";

            ddl.ID = "ddlbAssocIncRec" + i;

            cell1.Controls.Add(lbl1);
            cell2.Controls.Add(tb);
            cell3.Controls.Add(lbl2);
            cell4.Controls.Add(ddl);
            ddl.Items.Add(new ListItem("--Select--", "0"));
            ddl.Items.Add(new ListItem("1", "1"));
            ddl.Items.Add(new ListItem("2", "2"));


            row.Cells.Add(cell1);
            row.Cells.Add(cell2);
            row.Cells.Add(cell3);
            row.Cells.Add(cell4);

            someTBL.Rows.Add(row);
        }

    }
    protected void btnAddNewRowAssocInc_Click(object sender, EventArgs e)
    {

        TableRow newRow = new TableRow();
        newRow.ID = "trAssocIncRec" + lblcount.Text;

        TableCell newCell1 = new TableCell();
        newCell1.ID = "tdAssocIncRec1" + lblcount.Text;
        Label lbl = new Label();
        lbl.Text = "";
        lbl.ID = "lblAssocIncRec" + lblcount.Text;
        newCell1.Controls.Add(lbl);
        newRow.Cells.Add(newCell1);

        TableCell newCell2 = new TableCell();
        newCell2.ID = "tdAssocIncRec2" + lblcount.Text;
        TextBox txtBox = new TextBox();
        txtBox.ID = "txtAssocIncRec" + lblcount.Text;
        txtBox.MaxLength = 12;
        newCell2.Attributes.Add("align", "left");
        newCell2.Controls.Add(txtBox);
        newRow.Cells.Add(newCell2);

        TableCell newCell3 = new TableCell();
        newCell3.ID = "tdAssocIncRec3" + lblcount.Text;
        Label lbl2 = new Label();
        lbl2.Text = "";
        lbl2.ID = "lblAssocIncRec2" + lblcount.Text;
        newCell3.Controls.Add(lbl2);
        newRow.Cells.Add(newCell3);

        TableCell newCell4 = new TableCell();
        newCell4.ID = "tdAssocIncRec4" + lblcount.Text;
        DropDownList ddlb = new DropDownList();
        ddlb.ID = "ddlbAssocIncRec" + lblcount.Text;
        newCell4.Attributes.Add("align", "left");
        newCell4.Controls.Add(ddlb);
        ddlb.Items.Add(new ListItem("--Select--", "0"));
        ddlb.Items.Add(new ListItem("1", "1"));
        ddlb.Items.Add(new ListItem("2", "2"));
        newRow.Cells.Add(newCell4);

        someTBL.Rows.Add(newRow);
        ViewState["No_of_Rows"] = Convert.ToInt32(lblcount.Text);

        lblcount.Text = Convert.ToString(Convert.ToInt32(lblcount.Text) + 1);


    }

1 个答案:

答案 0 :(得分:0)

您需要做的是每次在Load事件或页面的Init事件中重新创建它们。这样可以检索值。

然后我会找到您创建的控件并将它们添加到视图状态中的列表中(因此当用户离开页面时它会被销毁)

ViewState["DynamicControls"] = list;

然后您存储了可以返回的值。