不会触发动态添加控件的事件

时间:2009-08-28 13:37:37

标签: asp.net event-handling

不会触发动态添加控件的事件。这发生在页面的create child controls事件中调用的函数中。

Button bb = new Button();
bb.Click += new EventHandler(bb_Click);
PlaceHolderQuestions.Controls.Add(bb);

4 个答案:

答案 0 :(得分:1)

Asp.net网页有一个lifecyle。事件调度基于控制树完成。您的动态控件应该在控件树中。将控件添加到OnInit中的占位符或您的Onload页面或包含控件,将调度该事件。

答案 1 :(得分:0)

您需要将其置于较早的事件中。尝试将代码放在init事件处理程序中。

答案 2 :(得分:0)

确保在每个 Page_Load上动态创建此按钮。我常常把类似的代码放在:

If Not Page.IsPostback()
  ...
End if

但是,由于Page_Load在按钮点击处理程序之前触发,如果在回发期间无法创建按钮,则按钮在其事件触发时不会“存在”。

答案 3 :(得分:0)

将代码放在先前的事件中不会解决问题。 即使你试图将你的代码放在Page_Load()中也不会解决问题。

根据页面的生命周期尝试覆盖OnLoad函数,并使用相同的ID重新创建并重新连接动态创建的控件。

protected override void OnLoad(EventArgs e)
{
    Button bb = new Button() { ID = "myBtn" }
    bb.Click += new EventHandler(bb_Click);
    PlaceHolderQuestions.Controls.Add(bb);

    base.OnLoad(e);
}

protected void Page_Load(object sender, EventArgs e)
{
}