c# - 无法调用动态按钮上的 Click 事件

标签 c# asp.net button

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

调用“test”方法后按钮放置正确,但未调用单击事件。

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

最佳答案

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

关于c# - 无法调用动态按钮上的 Click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695367/

相关文章:

python - 在 PyQT4 中使用循环创建按钮网格

Swift - Spritekit - 按钮淡入/淡出

c# - 找到的程序集的 list 定义与程序集引用不匹配。 (来自 HRESULT : 0x80131040) 的异常

c# - 取消任务中使用的取消 token 的正确方法是什么?

asp.net - <location path ="web.config"> 是做什么用的?

.net - 将 1.1 框架升级到 4.0

c# - 从变量创建名称列表

c# - AJAX POST 复杂 JSON 到 MVC4 Controller

asp.net - 重定向回asp.net mvc中的原始url

c# - 如何以编程方式单击 WPF 中的按钮?