繁体   English   中英

PageLoad之后创建的按钮-单击事件未触发

[英]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,并且该事件将丢失。 所以

  1. 在添加时添加它。
  2. 添加后在会话中设置一个变量以标识已添加动态控件
  3. 在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";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM