Controls.remove()方法在asp.net中不起作用

时间:2010-04-26 18:29:30

标签: c# asp.net .net-3.5

我有一个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)); 

    } 
} 

但是,文本框仍然可见。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我认为每次加载页面时都会创建这些控件,或者当你的删除代码在回发时运行时,它会失败,因为它们不存在。

因此,您需要将创建代码移动到每个页面加载时不会发生,确保它包含在if (!IsPostBacK) { ... }语句中。

如果你这样做,那么你就不需要手动删除它们,因为它们是动态创建的,因此默认情况下不会在每次回发时创建。

如果您可以发布从中调用创建控件的代码的位置,以及删除它,我可以帮助您更多。

答案 1 :(得分:0)

我最终做的不是删除文本框,而是删除了TableRow;