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

时间:2016-11-10 20:35:49

标签: c# asp.net commandargument

我正在向asp.net Web应用程序添加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方法。按钮显示正常,当我调试它们时,它们具有命令名称和分配给它们的正确命令参数。我不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

按钮是动态创建的,因此 它们不在控制树中 。因此,当您触发click事件时,它无法触发Command事件。

要修复此问题,您需要在 Page_Init 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++;
   }
}