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

本文关键字:事件 单击 按钮 加载 创建 | 更新日期: 2023-09-27 18:36:16

我有一个按钮,该按钮是在用户从下拉菜单中选择某个值创建的,但它不会触发其事件处理程序。生命周期(可能是 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";
    }

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

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

事件处理发生在页面初始化之后。因此,必须在页面初始化之前创建按钮,以便处理事件。

由于它是动态添加的,因此必须在每次回发后发生的 Page_Init() 事件中获取该代码。 否则,当发生回发时,Forms.Controls 集合中没有room_button_1,并且会丢失该事件。所以

    在添加
  1. 时添加它。
  2. 添加
  3. 后在会话中设置变量以标识已添加动态控件
  4. 在 page_init() 上检查 step2 的会话变量。 如果它显示"是",则创建在步骤 1 中创建的控件。

与其重复代码,不如创建一个用于按钮创建的函数并从Select_floor_first()调用它并Page_Init()

按钮超出范围伴侣。 将其定义为私有变量,否则事件不会在方法完成后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";
}