页面加载后创建的按钮 - 单击事件未触发
本文关键字:事件 单击 按钮 加载 创建 | 更新日期: 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,并且会丢失该事件。所以
- 在添加
- 时添加它。 添加
- 后在会话中设置变量以标识已添加动态控件
- 在 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";
}