我有一个按钮,在用户从下拉菜单中选择某个值后创建,但它没有触发其'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";
}
答案 0 :(得分:1)
如果必须动态创建按钮,请在页面的 OnInit()方法内创建。
事件处理发生在Page Init之后。因此,必须在Page Init之前创建按钮,以便处理事件。
答案 1 :(得分:0)
在动态添加时,您必须在每次回发后发生的Page_Init()事件中获取该代码。否则,当回发发生时,forms.controls集合中没有room_button_1,并且错过了该事件。所以
不是重复代码,最好是创建一个按钮创建功能,并从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";
}