我有一个Web应用程序,用户可以在运行时创建动态文本框。当用户单击SUBMIT时,表单将数据发送到数据库,我想删除动态控件。
控件在以下代码中创建:
Table tb = new Table();
tb.ID = "tbl";
for (i = 0; i < myCount; i += 1)
{
TableRow tr = new TableRow();
TextBox txtEmplName = new TextBox();
TextBox txtEmplEmail = new TextBox();
TextBox txtEmplPhone = new TextBox();
TextBox txtEmplPosition = new TextBox();
TextBox txtEmplOfficeID = new TextBox();
txtEmplName.ID = "txtEmplName" + i.ToString();
txtEmplEmail.ID = "txtEmplEmail" + i.ToString();
txtEmplPhone.ID = "txtEmplPhone" + i.ToString();
txtEmplPosition.ID = "txtEmplPosition" + i.ToString();
txtEmplOfficeID.ID = "txtEmplOfficeID" + i.ToString();
tr.Cells.Add(tc);
tb.Rows.Add(tr);
}
Panel1.Controls.Add(tb);
代码的删除部分是:
Table t = (Table)Page.FindControl("Panel1").FindControl("tbl");
foreach (TableRow tr in t.Rows)
{
for (i = 1; i < myCount; i += 1)
{
string txtEmplName = "txtEmplName" + i;
tr.Controls.Remove(t.FindControl(txtEmplName));
string txtEmplEmail = "txtEmplEmail" + i;
tr.Controls.Remove(t.FindControl(txtEmplEmail));
string txtEmplPhone = "txtEmplPhone" + i;
tr.Controls.Remove(t.FindControl(txtEmplPhone));
string txtEmplPosition = "txtEmplPosition" + i;
tr.Controls.Remove(t.FindControl(txtEmplPosition));
string txtEmplOfficeID = "txtEmplOfficeID" + i;
tr.Controls.Remove(t.FindControl(txtEmplOfficeID));
}
}
但是,文本框仍然可见。
有什么想法吗?
答案 0 :(得分:0)
我认为每次加载页面时都会创建这些控件,或者当你的删除代码在回发时运行时,它会失败,因为它们不存在。
因此,您需要将创建代码移动到每个页面加载时不会发生,确保它包含在if (!IsPostBacK) { ... }
语句中。
如果你这样做,那么你就不需要手动删除它们,因为它们是动态创建的,因此默认情况下不会在每次回发时创建。
如果您可以发布从中调用创建控件的代码的位置,以及删除它,我可以帮助您更多。
答案 1 :(得分:0)
我最终做的不是删除文本框,而是删除了TableRow;