当我动态地向Panel添加自定义UserControl时,usercontrol会丢失所有事件处理

时间:2011-09-15 14:15:40

标签: c# asp.net user-controls event-handling panel

我已经获得了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上的回发事件时,控件会成功添加,控件将从页面中删除,并且事件不会被触发。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为控件是动态添加的。我建议使用DynamicControlsPlaceHolder而不是Panel。当页面被回发后,它会为您保留控件。

DynamicControlsPlaceHolder: http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

另一种方法是在重新加载ViewState之前在每次回发时重新创建控件。我建议使用OnInit

DynamicControlsPlaceHolder完成了所有艰苦的工作,因此这可能是您的最佳选择。

相关问题