C# Can';t调用动态按钮上的单击事件

C# Can';t调用动态按钮上的单击事件,c#,asp.net,button,C#,Asp.net,Button,我想在代码隐藏中创建一个方法,创建一个按钮并将其放置在占位符中。我希望此按钮具有单击事件 调用“test”方法后,按钮放置正确,但没有调用click事件 private void test() { Button linkBtn1 = new Button(); linkBtn1.Text = "linkBtn1"; linkBtn1.OnClientClick = "return false;"; linkBtn1.Clic

我想在代码隐藏中创建一个方法,创建一个按钮并将其放置在占位符中。我希望此按钮具有单击事件

调用“test”方法后,按钮放置正确,但没有调用click事件

private void test()
    {
        Button linkBtn1 = new Button();
        linkBtn1.Text = "linkBtn1";
        linkBtn1.OnClientClick = "return false;";
        linkBtn1.Click += new EventHandler(linkBtn1_Click);
        PagesPlaceHolder.Controls.Add(linkBtn1);          

    }

    void linkBtn1_Click(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

正如@oleksii指出的,have客户端代码返回false,因此表单永远不会被提交。您需要对此进行注释,然后启动事件处理程序。

删除
OnClientClick=“return false;”“
是必要的,但不足以使其正常工作。如果希望触发动态添加按钮上的事件处理程序,则需要在每次加载页面时添加此按钮

一个简单的方法是保存按钮已在ViewState中添加的事实,然后在PageLoad上检查,如果需要,重新添加按钮

下面是一个适合我的示例(单击时抛出异常)


可能是因为这一行
linkBtn1.OnClientClick=“return false;”?当然,它不可能删除OnClientClick,或者如果您想返回一些内容来覆盖其他行为,请返回true以让它单击。
protected void Page_Load(object sender, EventArgs e)
{
    //if the button was added previously, add it again
    if (ViewState["Added"] != null && (bool)ViewState["Added"])
        addButton();
}

//this is the method that adds the button
protected void add_Click(object sender, EventArgs e) {
    ViewState["Added"] = true;
    addButton();
}

private void addButton() {
    Button linkBtn1 = new Button();
    linkBtn1.Text = "linkBtn1";
    linkBtn1.Click += new EventHandler(linkBtn1_Click);
    placeholder1.Controls.Add(linkBtn1);
}

void linkBtn1_Click(object sender, EventArgs e) {
    throw new Exception("Button Click Event Triggered.  Hello yellow screen!!!");
}