ASP.NET中我通过后台动态生成了一些TEXTBOX,但是为什么取不到值呢?

再次贴出我的部分代码。
这里是动态生成控件的代码
protected void btnSubmit_Click(object sender, EventArgs e)
{
Table table = new Table();
table.ID = "tableSeat";
TableRow tablerow;
TableCell tablecell;
TextBox txt;
Label lbl;
int row = Convert.ToInt32(txtRow.Text.ToString());
for (int i = 1; i <= row; i++)
{
tablerow = new TableRow();
tablecell = new TableCell();
txt = new TextBox();
lbl = new Label();
lbl.ID = "Lable" + i.ToString();
lbl.Text = "第" + i.ToString() + "排的座位数为:";
tablecell.Controls.Add(lbl);
tablerow.Cells.Add(tablecell);
tablecell = new TableCell();
txt.ID = "txtSeatOf" + i.ToString();
tablecell.Controls.Add(txt);
tablerow.Cells.Add(tablecell);
table.Rows.Add(tablerow);
}
MyPanel.Controls.Add(table);
btnSave.Enabled = true;
}
这里是测试读取数据的代码,每次FIND控件都为NULL
protected void btnSave_Click(object sender, EventArgs e)
{
Table tableTest = new Table();
TextBox txt1 = new TextBox();
tableTest = MyPanel.FindControl("tableSeat") as Table;
txt1 = tableTest.FindControl("txtSeatOf1") as TextBox;
string str = txt1.Text;

我也想设置RUNAT 可是我后台直接NEW出来的控件,没有办法设置RUNAT这个属性。不知道为什么。

我觉得问题可能是你读取数据的代码是在另一个按钮提交事件里,按钮提交刷新页面后自动生成的控件其状态应该是无法自动保存的,所以需要保证每次提交刷新页面后都要再生成一次控件~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-21
TextBox txt;
Label lbl;
你声明在for循环的外面。里面每循环一次都是在覆盖以前的。
这样的话你可以试试,假如循环了10次 即i=10
FindControl("txtSeatOf10") as TextBox;
看能不能找出来的。

如果可以找到的话,你就应该把TextBox txt;Label lbl;声明在for循环内部。每次都是新实例化一个控件,而不是一直覆盖一个控件。
第2个回答  2010-09-20
你table设成runat="server"了吗?如果没有后台是取不到这个表格的,加了如果还取不到就是你前面生成表格的时候出错了
第3个回答  2013-01-26
Request.From("txtSeatOf1")试试,btnSave里不能再用FindControl了
相似回答
大家正在搜