[英]Button created after PageLoad - Click Event not firing
我有一个在用户从下拉菜单中选择某个值之后创建的按钮,但是它没有触发其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";
}
如果必须动态创建按钮,请在页面的OnInit()方法内创建它。
事件处理在Page Init之后发生。 因此,必须先在Page Init之前创建按钮才能处理事件。
由于它是动态添加的,因此您必须在每次回发之后发生的Page_Init()事件中使用该代码。 否则,当发生回发时,forms.controls集合中没有room_button_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";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.