动态添加的 ASP.Net 按钮无法调用 Click 或 CommandArgument 事件

Dynamically added ASP.Net Button could not call Click or CommandArgument event

我正在向 asp.net 网络应用程序添加 x 个按钮。这是我这样做的代码:

int i = 0;
foreach(var foo in bar){
    Button b = new Button();
    b.ID = "button" + i.ToString();
    b.CommandName = "var_value";
    b.CommandArgument = foo;
    b.Command += Execute_Command;

    //add to panel p
    p.Controls.Add(b);

    i++;
}

private void Execute_Command(object sender, CommandEventArgs e){
    //do stuff
}

Execute_Command 方法从未被调用。这些按钮显示得很好,当我调试时,它们有命令名称和分配给它们的正确命令参数。我不确定我做错了什么。

按钮是动态创建的,因此它们不在控件树中。结果,当您触发点击事件时,它无法触发命令事件。

为了修复它,您需要重新加载 Page_Init 或 [=22 中动态创建的按钮=]Page_Load 每个回发 上的事件 ID相同.

例如,

protected void Page_Init(object sender, EventArgs e)
{
   int i = 0;
   foreach(var foo in bar){
      Button b = new Button();
      b.ID = "button" + i.ToString();
      b.CommandName = "var_value";
      .CommandArgument = foo;
      b.Command += Execute_Command;

      //add to panel p
      p.Controls.Add(b);

      i++;
   }
}