在我的网站中,我可以使用 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);
}
答案 0 :(得分:0)
您需要做的是每次在Load事件或页面的Init事件中重新创建它们。这样可以检索值。
然后我会找到您创建的控件并将它们添加到视图状态中的列表中(因此当用户离开页面时它会被销毁)
ViewState["DynamicControls"] = list;
然后您存储了可以返回的值。