我有一个ASP.NET WebForm,其中包含许多动态添加的控件,这些控件随LoadControl(“〜/ pathto / file.ascx”);
在ascx文件中显式添加的所有控件都可以按预期工作,以便能够在回发时获取用户输入值。但是,我的一个控件需要未知数量的子控件,这些子控件只能以编程方式添加到后面的代码中。考虑一下ascx文件:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="....ascx.cs" Inherits="....." %>
<table>
<tr>
<td colspan="2">Option</td>
<td>Group</td>
<td>Default Option</td>
<asp:PlaceHolder runat="server" ID="tblRowHeaders"/>
</tr>
<tr>
<td><asp:CheckBox runat="server" id="chkEnabled"/></td>
<td><asp:Panel runat="server" id="pnlItemName" style="width: 200px;"/></td>
<td><asp:DropDownList runat="server" ID="lstGroups" style="min-width:200px;" CssClass="ylt_small_admin"/></td>
<td><asp:DropDownList runat="server" ID="lstDefault" style="min-width:150px;" CssClass="ylt_small_admin" /></td>
<asp:PlaceHolder runat="server" ID="tblRowValues" EnableViewState="true"/>
</tr>
</table>
现在在Page_PreInit中的某处处理了以下代码
private void addRowPanels()
{
tblRowValues.Controls.Clear();
foreach (double d in Weightings)
{
TableCell c = new TableCell();
c.EnableViewState = true;
TextBox t = new TextBox();
t.EnableViewState = true;
t.Text = d.ToString();
c.Controls.Add(t);
tblRowValues.Controls.Add(c);
}
}
然后在回发阶段中,我尝试检索以编程方式生成的文本框的值:
private List<Double> getNewWeightings()
{
List<Double> newweightings = new List<double>();
foreach (Control c in tblRowValues.Controls)
{
TextBox t = (TextBox) c.Controls[0];
Double d = Double.Parse(t.Text);
newweightings.Add(d);
}
return newweightings;
}
但是newweightings始终是一个空列表