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