按钮动作没有开火

时间:2012-12-24 07:32:00

标签: c# asp.net devexpress

我有一个Web表单,可以在组合框(devexpress)中选择时动态加载控件。我在主表单上有以下代码

 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;
    }

我的问题是,如果我动态加载它,用户控件的保存按钮不会触发(我已经使用断点和上面显示的代码进行了检查。但是如果我静态使用它,它会顺利运行。(即通过拖动设计模式)

2 个答案:

答案 0 :(得分:1)

你是对的,你必须在回发中坚持控制。

然而,Page Load事件为时已晚,无法添加控件。在页面的Init事件上执行此操作,您应该很好。要接收回发事件,当调用ProcessPostData(在PreLoad之前调用)时,控件应该存在。

对于文本框,您还需要接收用户输入的值。这也发生在ProcessPostData上,如果在此之后添加控件,则不会收到用户输入的值。

参考:ASP.NET Page Life Cycle

答案 1 :(得分:0)

嘿,我找到了解决方案

而不是在combobox_selectedindexchanged中创建控件我将我的控件创建代码放在基于combobox.selectedindex的Pageload上,即

 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);
        }

    }

请参阅Button click event not firing within use control in ASP .Net