我有一个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;
}
我的问题是,如果我动态加载它,用户控件的保存按钮不会触发(我已经使用断点和上面显示的代码进行了检查。但是如果我静态使用它,它会顺利运行。(即通过拖动设计模式)
答案 0 :(得分:1)
你是对的,你必须在回发中坚持控制。
然而,Page Load事件为时已晚,无法添加控件。在页面的Init事件上执行此操作,您应该很好。要接收回发事件,当调用ProcessPostData(在PreLoad之前调用)时,控件应该存在。
对于文本框,您还需要接收用户输入的值。这也发生在ProcessPostData上,如果在此之后添加控件,则不会收到用户输入的值。
答案 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