【问题标题】:When I add an custom UserControl to a Panel dynamically, the usercontrol loses all event handling当我将自定义用户控件动态添加到面板时,用户控件会丢失所有事件处理
【发布时间】:2011-09-15 14:15:40
【问题描述】:

我有一个 aspx 页面,它根据一组单选按钮上的输入动态地将 UserControl 加载到 Panel 对象中。 UserControl 在回发时成功添加并正确显示到面板,并在 UC 中调用 Page_Load() 事件就好了,但是当我以任何会触发事件的方式与表单交互时,回发时不会捕获该事件。

我尝试在我知道会被调用的 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 上绑定的回发事件时,控件会成功添加,控件会从页面中删除并且不会触发事件。

任何帮助将不胜感激。

【问题讨论】:

  • 奇怪,在加载后添加到面板之前尝试设置控件id。
  • 只是为了确认一下-您是说您的动态创建的控件在回发后不会出现吗?或者它们确实出现了,但事件处理程序对这些控件不起作用?

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


【解决方案1】:

这是因为控件是动态添加的。我建议使用DynamicControlsPlaceHolder 而不是面板。当页面回发时,它将为您保留控件。

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

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

DynamicControlsPlaceHolder 消除了所有繁重的工作,因此这可能是您的最佳选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多