0

我有一个在用户从下拉菜单中选择某个值后创建的按钮,但它没有触发它的 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";
    }
4

3 回答 3

1

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

事件处理发生在 Page Init 之后。因此,必须在 Page Init 之前创建按钮,以便处理事件。

于 2013-10-21T22:48:35.870 回答
0

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

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

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

于 2013-10-21T22:51:34.450 回答
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";
}
于 2013-10-21T23:54:35.843 回答