asp.net формирует программно сгенерированные элементы управления без сохранения состояния просмотра - PullRequest
0 голосов
/ 27 ноября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...