【问题标题】:Controls.remove() method not working in asp.netControls.remove() 方法在 asp.net 中不起作用
【发布时间】:2010-04-26 18:29:29
【问题描述】:

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

在以下代码中创建控件:

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)); 

    } 
} 

但是,文本框仍然可见。

有什么想法吗?

【问题讨论】:

  • 目前尚不清楚 TextBox 实际添加到控制树的位置。在你的代码中,你实例化它们,给它们 ID,但就是这样。
  • 请不要使用 C#3.5 标签。见stackoverflow.com/questions/247621/…

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


【解决方案1】:

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

因此,您需要通过确保将创建代码包装在 if (!IsPostBacK) { ... } 语句中来移动创建代码,使其不会在每次页面加载时发生。

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

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

【讨论】:

  • 我在页面加载时创建了一行文本框。如果用户想要添加另一行,他们点击“添加另一行”按钮;那是在规格中。当用户提交时(假设他们创建了 5 个额外的行),我想删除用户创建的 5 个新行。
  • 那些新行确实不应该存在,因为当它被回发时,你的新页面不知道有 5 个新行,因为你动态创建了它们。也许我遗漏了一些东西......你能发布你如何添加新行吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2012-06-17
    • 2012-02-09
    • 2020-05-17
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多