2012-01-01 68 views
2

我想在后面的代码中创建一个方法,该方法创建一个按钮并将其放置在PlaceHolder中。我希望这个按钮有一个Click事件。无法通过动态按钮调用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(); 
    } 
+6

也许是因为这一行'linkBtn1.OnClientClick =样本“返回false;”; '? – oleksii 2012-01-01 20:38:39

+0

它可能不是,它肯定会删除OnClientClick,或者如果您想返回某些内容来覆盖其他行为,请返回true以让其单击。 – Aristos 2012-01-01 21:40:12

回答

2

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

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