【问题标题】:Dynamically created Button not calling event c#动态创建的按钮不调用事件 c#
【发布时间】:2015-08-20 12:53:52
【问题描述】:

按钮不会调用它的事件。

在另一个按钮中调用:

placeHolder.Controls.Add(CreateButton());

创建按钮:

public Button CreateButton()
{
    Button btn = new Button();
    btn.ID = "id";
    btn.Text = "some text";
    btn.Attributes.Add("onclick", "return false;");
    btn.Click += new EventHandler(btn_Click);
    return btn;
}

功能:

private void btn_Click(object sender, EventArgs e)
{
     // do something.
}

放置调试行以查找源,单击时根本不调用 btn_Click() 。缺少什么?

【问题讨论】:

  • 您是否尝试将方法添加到事件列表中,例如:btn.Click += btn_Click;
  • 您必须在每次加载页面时添加按钮,否则 ASp.NET 触发事件的来源是什么
  • 不起作用 Sebastian,Andrei - 我不希望该按钮在那里,除非单击另一个按钮,所以它只放在另一个按钮事件单击的占位符中。

标签: c# asp.net


【解决方案1】:

此代码阻止点击事件触发:

btn.Attributes.Add("onclick", "return false;");

删除此代码,或将其更改为:

btn.Attributes.Add("onclick", "return true;");

编辑

我试过这段代码,它工作正常。 PlaceHolderform 标签中,runat 属性是server

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
        placeHolder.Controls.Add(CreateButton());
}

public Button CreateButton()
{
    Button btn = new Button();
    btn.ID = "id";
    btn.Text = "some text";
    btn.Click += btn_Click;
    return btn;
}

private void btn_Click(object sender, EventArgs e)
{

}

【讨论】:

  • 我把它放进去是为了防止回帖被触发,删除/更改为 true 仍然不会触发事件:btn_Click
  • @thatguy 看到可以编辑的答案。我用VS2013对此进行了测试。
  • 谢谢,我将其更改为通过 Page_Load 而不是通过另一个按钮加载,并且只需在按钮中设置它的可见性属性 - 已接受。
  • 如何停止回发?
  • 感谢您的帮助,但这只是检查它是否是回发 - 而不是在按钮上阻止它。
猜你喜欢
  • 1970-01-01
  • 2021-08-09
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多