代码之家  ›  专栏  ›  技术社区  ›  user279521

controls.remove()方法在ASP.NET中不工作

  •  2
  • user279521  · 技术社区  · 15 年前

    我有一个Web应用程序,用户可以在运行时创建动态文本框。当用户单击提交时,表单将数据发送到数据库,我希望删除动态控件。

    控件按以下代码创建:

    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 回复  |  直到 15 年前
        1
  •  0
  •   Kelsey    15 年前

    我假设每次加载页面时都要创建这些控件,否则在回发时运行删除代码时,将失败,因为它们不存在。

    因此,您需要通过确保将创建代码包装在 if (!IsPostBacK) { ... } 语句。

    如果这样做,则不需要手动删除它们,因为它们是动态创建的,因此在默认情况下不会在每个回发上创建。

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

        2
  •  0
  •   user279521    15 年前

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