无法在动态按钮上调用Click Event

时间:2012-01-01 20:36:36

标签: c# asp.net button

我想在代码后面创建一个方法,创建一个按钮并将其放在PlaceHolder中。我希望这个按钮有一个Click事件。

调用“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();
    }

2 个答案:

答案 0 :(得分:3)

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

一种简单的方法是保存按钮已添加到ViewState中,然后在PageLoad上检查,并在需要时重新添加按钮。

这是一个适合我的示例(并在点击时抛出异常)

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!!!");
}

答案 1 :(得分:0)

正如@oleksii指出的那样,客户端代码返回false,因此表单永远不会被提交。你需要对此进行评论,然后你的事件处理程序应该触发。