asp.net网络表单以编程方式生成的控件未保存视图状态

时间:2018-11-27 11:38:44

标签: c# asp.net webforms postback

我有一个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始终是一个空列表

0 个答案:

没有答案