【问题标题】:Dynamically added ASP.Net Button could not call Click or CommandArgument event动态添加的 ASP.Net 按钮无法调用 Click 或 CommandArgument 事件
【发布时间】:2017-03-25 00:13:33
【问题描述】:

我正在向一个 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 方法。按钮显示得很好,当我调试它们时,它们具有命令名称和分配给它们的正确命令参数。我不确定我做错了什么。

【问题讨论】:

    标签: c# asp.net commandargument


    【解决方案1】:

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

    为了修复它,您需要在 Page_InitPage_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++;
       }
    }
    

    【讨论】:

    • 这成功了!包含此代码的方法在 if(!IsPostBack) 中被调用 谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多