按钮动作未触发

本文关键字:按钮 | 更新日期: 2023-09-27 17:49:18

我有一个动态加载控件在组合框(devexpress)选择的web表单。我在主表单

上有以下代码
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        }
        if (Session["_active_control"] != null)//persist control on postbacks
        {
            Control cntrl = Session["_active_control"] as Control;
            pnl_main.Controls.Clear();
            pnl_main.Controls.Add(cntrl);
        }
    }
    protected void cmb_control_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control cntrl= Page.LoadControl("~/" + cmb_control.SelectedItem.Value);
        pnl_main.Controls.Clear();
        pnl_main.Controls.Add(cntrl);
       Session["_active_control"] = cntrl;
    }

我也有一个用户控件有三个文本框和一个按钮代码

  protected void btn_save_Click(object sender, EventArgs e)
    {
        lbl.Text = ASPxTextBox1.Text + "<br>" + ASPxTextBox2.Text + "<br>" + ASPxTextBox3.Text;
    }

我的问题是,保存按钮的用户控制是不触发,如果我加载它动态(我已经检查使用断点,也上面所示的代码。然而,如果我静态地使用它,它会运行得很顺利。通过在设计模式下拖动)

按钮动作未触发

您必须在多个回发之间持久化控件,这是正确的。

但是,页面加载事件太晚,无法添加回控件。在页面的Init事件上执行此操作,您应该就没问题了。要接收回发事件,该控件应该在ProcessPostData(在PreLoad之前调用)被调用时出现。

同样,对于文本框,您将希望接收用户输入的值。这也发生在ProcessPostData上,如果您在此之后添加控件,您将不会收到用户输入的值。

参考:ASP。. NET页面生命周期

我找到解决办法了

在combobox_selectedindexchanged中创建控件时,我将控件创建代码放在基于combobox的页面加载上。selectedindex。

 protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (cmb_control.SelectedItem != null)
        {
            Control cntrl = Page.LoadControl("~/" + cmb_control.SelectedItem.Value);
            cntrl.ID = "_new_ctrl" + cmb_control.SelectedItem.Value;
            pnl_main.Controls.Clear();
            pnl_main.Controls.Add(cntrl);
        }
    }

参见asp.net中使用控件中的按钮单击事件未触发