C# 如何从动态创建的文本框中读取数据?

C# 如何从动态创建的文本框中读取数据?,c#,asp.net,webforms,C#,Asp.net,Webforms,我已经动态创建了一些标签和文本框 用户单击“保存”按钮后,我需要读取面板(panelFields)中的所有标签和文本框,并获取label.text和textbox.text以保存它 问题是,通过panelFields循环,我并没有得到任何控件 发生这种情况是因为(我认为)asp.net页面生命周期。因此,单击任何按钮(回发)后,所有控件都将消失 这是我在其中创建动态字段的代码: if (dr.HasRows) { panel

我已经动态创建了一些标签和文本框

用户单击“保存”按钮后,我需要读取面板(panelFields)中的所有标签和文本框,并获取label.text和textbox.text以保存它

问题是,通过panelFields循环,我并没有得到任何控件

发生这种情况是因为(我认为)asp.net页面生命周期。因此,单击任何按钮(回发)后,所有控件都将消失

这是我在其中创建动态字段的代码:

if (dr.HasRows)
                {
                    panelFields.Controls.Add(new LiteralControl("<table cellpadding='6' cellspacing='6'>"));

                    while (dr.Read())
                    {
                        panelFields.Controls.Add(new LiteralControl("  <tr>"));
                        panelFields.Controls.Add(new LiteralControl("    <td style='vertical-align:top;font-weigth:bold;font-size:10pt;'>"));
                        string field_label = dr["field_label"].ToString();
                        string field_name  = dr["field_name"].ToString();
                        string field_type = dr["field_type"].ToString();
                        string field_width = dr["width"].ToString();
                        string field_height = dr["height"].ToString();

                        Label lbl = new Label();
                        lbl.Text = field_label;
                        lbl.ID = "lbl" + field_name;
                        panelFields.Controls.Add(lbl);

                        switch (field_type)
                        {
                            case "Text":
                                panelFields.Controls.Add(new LiteralControl("  <td >"));
                                TextBox txt = new TextBox();
                                txt.Text = "";
                                txt.ID = "txt" + field_name;
                                Unit ut = new Unit(field_width);
                                txt.Width = ut;
                                ut = new Unit(field_height);
                                txt.Height = ut;
                                txt.TextMode = TextBoxMode.MultiLine;
                                panelFields.Controls.Add(txt);
                                panelFields.Controls.Add(new LiteralControl("  </td>"));

                                break;
                            case "Number":
                                panelFields.Controls.Add(new LiteralControl("  <td>"));
                                txt = new TextBox();
                                txt.Text = "";
                                txt.ID = "txt" + field_name;
                                ut = new Unit(field_width);
                                txt.Width = ut;
                                ut = new Unit(field_height);
                                txt.Height = ut;
                                txt.TextMode = TextBoxMode.Number;
                                panelFields.Controls.Add(txt);
                                panelFields.Controls.Add(new LiteralControl("  </td>"));
                                break;
                            case "Date":
                                panelFields.Controls.Add(new LiteralControl("  <td>"));
                                txt = new TextBox();
                                txt.Text = "";
                                txt.ID = "txt" + field_name;
                                ut = new Unit(field_width);
                                txt.Width = ut;
                                ut = new Unit(field_height);
                                txt.Height = ut;
                                txt.TextMode = TextBoxMode.Date;
                                panelFields.Controls.Add(txt);
                                panelFields.Controls.Add(new LiteralControl("  </td>"));
                                break;
                            case "Time":
                                panelFields.Controls.Add(new LiteralControl("  <td>"));
                                txt = new TextBox();
                                txt.Text = "";
                                txt.ID = "txt" + field_name;
                                 ut = new Unit(field_width);
                                txt.Width = ut;
                                ut = new Unit(field_height);
                                txt.Height = ut;
                                txt.TextMode = TextBoxMode.Time;
                                panelFields.Controls.Add(txt);
                                panelFields.Controls.Add(new LiteralControl("  </td>"));
                                break;
                        }

                        panelFields.Controls.Add(new LiteralControl("</tr>"));
                    }
                    panelFields.Controls.Add(new LiteralControl("</table>"));
                }
if(dr.HasRows)
{
panelFields.Controls.Add(新的LiteralControl(“”);
while(dr.Read())
{
panelFields.Controls.Add(新的LiteralControl(“”);
panelFields.Controls.Add(新的LiteralControl(“”);
字符串field_label=dr[“field_label”].ToString();
字符串field_name=dr[“field_name”].ToString();
字符串字段类型=dr[“字段类型”]。ToString();
字符串字段_width=dr[“width”]。ToString();
字符串字段_height=dr[“height”]。ToString();
标签lbl=新标签();
lbl.Text=字段\标签;
lbl.ID=“lbl”+字段名称;
panelFields.Controls.Add(lbl);
开关(现场型)
{
案例“文本”:
panelFields.Controls.Add(新的LiteralControl(“”);
TextBox txt=新的TextBox();
txt.Text=“”;
txt.ID=“txt”+字段名称;
单位ut=新单位(字段宽度);
txt.Width=ut;
ut=新装置(现场高度);
高度=ut;
txt.TextMode=TextBoxMode.MultiLine;
panelFields.Controls.Add(txt);
panelFields.Controls.Add(新的LiteralControl(“”);
打破
案例“编号”:
panelFields.Controls.Add(新的LiteralControl(“”);
txt=新文本框();
txt.Text=“”;
txt.ID=“txt”+字段名称;
ut=新单位(字段宽度);
txt.Width=ut;
ut=新装置(现场高度);
高度=ut;
txt.TextMode=TextBoxMode.Number;
panelFields.Controls.Add(txt);
panelFields.Controls.Add(新的LiteralControl(“”);
打破
案件“日期”:
panelFields.Controls.Add(新的LiteralControl(“”);
txt=新文本框();
txt.Text=“”;
txt.ID=“txt”+字段名称;
ut=新单位(字段宽度);
txt.Width=ut;
ut=新装置(现场高度);
高度=ut;
txt.TextMode=TextBoxMode.Date;
panelFields.Controls.Add(txt);
panelFields.Controls.Add(新的LiteralControl(“”);
打破
案例“时间”:
panelFields.Controls.Add(新的LiteralControl(“”);
txt=新文本框();
txt.Text=“”;
txt.ID=“txt”+字段名称;
ut=新单位(字段宽度);
txt.Width=ut;
ut=新装置(现场高度);
高度=ut;
txt.TextMode=TextBoxMode.Time;
panelFields.Controls.Add(txt);
panelFields.Controls.Add(新的LiteralControl(“”);
打破
}
panelFields.Controls.Add(新的LiteralControl(“”);
}
panelFields.Controls.Add(新的LiteralControl(“”);
}
这是我试图获取所有标签和文本框的代码

htmlAllFields = "<table cellspacing='4' cellpadding='4'";
            string _label="";
            string _value="";
            int counter = panelFields.Controls.Count;
            foreach (Control ctr in panelFields.Controls)
            {
                if (ctr is Label)
                {
                    Label lbl = (Label)ctr;
                    _label = lbl.Text;
                }
                if (ctr is TextBox)
                {
                    TextBox txt = (TextBox)ctr;
                    _value = txt.Text;
                }
                htmlAllFields = htmlAllFields + " <tr>";
                htmlAllFields = htmlAllFields + "  <td>";
                htmlAllFields = htmlAllFields + "    <b>" + _label + "</b>";
                htmlAllFields = htmlAllFields + "  </td>";
                htmlAllFields = htmlAllFields + "  <td>";
                htmlAllFields = htmlAllFields + "   " + _value;
                htmlAllFields = htmlAllFields + "  </td>";
                htmlAllFields = htmlAllFields + " <tr>";
            }

            htmlAllFields = htmlAllFields + "</table>";

htmlAllFields=“
Request.Form
是页面上提交的所有控件的集合。您可以在回发时解析该集合以获取任何动态创建的控件的值。您的问题不清楚您是如何进行回发的。如果您是通过ajax/Jquery post来实现的,那么将类添加到动态控件中,然后使用Jquery使用类选择器
$('.myclass')。每个(函数(I,obj){code here})语法将允许您循环ObjectsNo;是来自控件的经典回发…始终在回发时重新创建动态控件(因此无
IsPostBack
check)。ViewState将处理这些值。