我已经获得了aspx页面,它根据一组单选按钮上的输入动态地将UserControl加载到Panel对象中。 UserControl在回发时成功地向Panel添加并正确显示,并在UC中调用Page_Load()事件,但是当我以任何方式与表单交互时会触发事件,事件不会在回发中捕获。 / p>
我试图在Page_Load()中添加事件处理关联,我知道这个关联被调用,并且在ASP.NET标记中添加关联而没有任何结果差异。
这就是我添加控件的方式(对象名称已经简化):
private UserControl _control;
protected void RadioButtonGroup_CheckedChanged(object sender, EventArgs e)
{
RadioButton radioButton = (RadioButton)sender;
if (radioButton == RadioButton1Ctl)
{
_control = (UserControl1)LoadControl("~/Controls/UserControl1.ascx");
PanelCtl.Controls.Add(_control);
}
else if (radioButton == RadioButton2Ctl)
{
_control = (UserControl2)LoadControl("~/Controls/UserControl2.ascx");
PanelCtl.Controls.Add(_control);
}
}
正如我所说,当我点击任何按钮或有任何应该绑定在UC上的回发事件时,控件会成功添加,控件将从页面中删除,并且事件不会被触发。
非常感谢任何帮助。
答案 0 :(得分:1)
这种情况正在发生,因为控件是动态添加的。我建议使用DynamicControlsPlaceHolder
而不是Panel。当页面被回发后,它会为您保留控件。
DynamicControlsPlaceHolder: http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
另一种方法是在重新加载ViewState之前在每次回发时重新创建控件。我建议使用OnInit
。
DynamicControlsPlaceHolder完成了所有艰苦的工作,因此这可能是您的最佳选择。