页面加载后创建的按钮 - 单击“事件未触发”

时间:2013-10-21 22:41:35

标签: c# asp.net .net autopostback

我有一个按钮,用户从下拉菜单中选择某个值后创建,但它没有触发其'EventHandler。是否有生命周期,OnInit,我必须刷新以使处理程序正确触发?

来自DropDownList的 OnSelectedIndexChanged

的事件
protected void Selected_floor_first(object sender, EventArgs e)
{
    Button btn = new Button();
    btn.ID = "room_button_1";
    btn.Text = "Select";
    btn.Click += new EventHandler(room_1_Click);
    floor_1_room_overlay.Controls.Add(btn);
}

处理程序:(不会被解雇)

protected void room_1_Click(object sender, EventArgs e)
    {
        validation.Text = "You selected a Room";
    }

3 个答案:

答案 0 :(得分:1)

如果必须动态创建按钮,请在页面的 OnInit()方法内创建。

事件处理发生在Page Init之后。因此,必须在Page Init之前创建按钮,以便处理事件。

答案 1 :(得分:0)

在动态添加时,您必须在每次回发后发生的Page_Init()事件中获取该代码。否则,当回发发生时,forms.controls集合中没有room_button_1,并且错过了该事件。所以

  1. 在添加时添加它。
  2. 在会话中添加设置变量以识别已添加动态控件后
  3. on page_init()检查step2的会话变量。如果是,则创建您在步骤1中创建的控件。
  4. 不是重复代码,最好是创建一个按钮创建功能,并从Select_floor_first()Page_Init()调用它。

答案 2 :(得分:0)

按钮超出了范围配合。将它定义为私有变量,否则事件不会触发,因为在Selected_floor_first方法完成后按钮处理

private Button btn = new Button();

protected void Selected_floor_first(object sender, EventArgs e)
{
    btn.ID = "room_button_1";
    btn.Text = "Select";
    btn.Click += new EventHandler(room_1_Click);
    floor_1_room_overlay.Controls.Add(btn);
}

protected void room_1_Click(object sender, EventArgs e)
{
        validation.Text = "You selected a Room";
}