为什么我的动态文本框在第一次点击时没有删除?

Why does my dynamic textbox not remove on first click?

我开始 并且能够得到我最初问题的答案。现在文本框被删除了,但只是我第二次单击删除按钮。这是我试过的

protected void btnRemoveTextBox_Click(object sender, EventArgs e)
{
    foreach (Control control in PlaceHolder1.Controls)
    {
        var tb = new TextBox();
        tb.ID = "Textbox" + counter;
        if ((control.ID == tb.ID.ToString()) && (control.ID != null))
        {
            controlIdList.Remove(tb.ID);
            ViewState["controlIdList"] = controlIdList;
        }
    }
}

当我逐步使用断点和错误调试时,代码运行了两次,没有错误,但是在第二次运行时,它删除了按钮。

因为您在 LoadViewState 方法中创建并添加了文本框(在页面生命周期的早期),并且此处仅从 controlIdList 中删除了一个 id 而不是从控件树中删除。注意:您不需要在 btnRemoveTextBox_Click 方法中创建新的 TextBox 实例。

protected void btnRemoveTextBox_Click(object sender, EventArgs e)
{
  foreach (Control control in PlaceHolder1.Controls)
  {
    string id = "Textbox" + counter;
    if (control.ID == id)
    {
      controlIdList.Remove(id);
      PlaceHolder1.Controls.Remove(control);
      break;
    }
  }
}