不能调用Click事件动态按钮 [英] Can't call Click Event on dynamic button

查看:156
本文介绍了不能调用Click事件动态按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想背后创建一个按钮,并将其放置在一个占位符创建于code的方法。我想这个按钮有一个Click事件。

调用测试方​​法按钮后放置正确,但click事件没有被调用。

 私人无效测试()
    {
        按钮linkBtn1 =新按钮();
        linkBtn1.Text =linkBtn1;
        linkBtn1.OnClientClick =返回false;;
        linkBtn1.Click + =新的EventHandler(linkBtn1_Click);
        PagesPlaceHolder.Controls.Add(linkBtn1);    }    无效linkBtn1_Click(对象发件人,EventArgs的发送)
    {
        抛出新NotImplementedException();
    }


解决方案

删除的OnClientClick =返回false;是必要的,但还不足以得到这个工作。如果你想在动态添加按钮事件处理程序被触发,则需要添加此按钮的每次页面加载

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

下面是对我的作品(并引发点击时除外),样本

 保护无效的Page_Load(对象发件人,EventArgs的发送)
{
    //如果按钮添加previously,再次添加它
    如果(的ViewState [新增] = NULL&放大器;!及(布尔)的ViewState [新增])
        Add按钮();
}//这是添加的按钮的方法
保护无效add_Click(对象发件人,EventArgs的发送){
    的ViewState [新增] =真;
    Add按钮();
}私人无效Add按钮(){
    按钮linkBtn1 =新按钮();
    linkBtn1.Text =linkBtn1;
    linkBtn1.Click + =新的EventHandler(linkBtn1_Click);
    placeholder1.Controls.Add(linkBtn1);
}无效linkBtn1_Click(对象发件人,EventArgs的发送){
    抛出新的异常(按钮点击事件触发你好黄屏!!!);
}

I want to create a method in code behind that creates a button and places it in a PlaceHolder. I want this button to have a Click event.

After calling the "test" method button is placed correctly but the click event is not called.

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

解决方案

Removing the OnClientClick = "return false;" is necessary but not sufficient to get this to work. If you want the event handler on the dynamically added button to be triggered, you'll need to add this button every time the page loads.

One simple way would be to save the fact that the button has been added in ViewState, and then check that on PageLoad, and re-add the button if needed.

Here's a sample that works for me (and throws the exception when clicked)

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

这篇关于不能调用Click事件动态按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆