У меня есть 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 - это всегда пустой список