C# 如何将控件移动到动态添加的usercontrol页面中?

C# 如何将控件移动到动态添加的usercontrol页面中?,c#,asp.net,dynamic-usercontrols,C#,Asp.net,Dynamic Usercontrols,我有一个usercontrol,它在CreateChildControls方法上动态移动一些web控件。 将此控件用于以下页面时: <myControls:MyUserControl runat="server" ID="myUserControl" /> <asp:UpdatePanel runat="server"> <ContentTemplate> <asp:PlaceHolder runat="server" ID="

我有一个usercontrol,它在CreateChildControls方法上动态移动一些web控件。 将此控件用于以下页面时:

<myControls:MyUserControl runat="server" ID="myUserControl" />
<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="plhControls" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnAdd" OnClick="btnAdd_Click" />
它在我的CreateChildControls内崩溃并出错:在数据绑定、初始化、加载、预渲染或卸载阶段无法修改控件集合

当我将WebControl添加到我的UserControl中的占位符时,正好是这一行:

plhContent.Controls.Add(myWebControl);

因此,我不明白为什么在这种情况下,当我动态添加我的UserControl时,我不能在CreateChildControls事件中移动web控件。

就“页面生命周期”而言,这些控件必须初始化并与其他控件同步。查看Page.LoadControl方法,看看是否可以在前面创建控件


我们有时使用的方法包括使用页面中的回发参数。不要忘记,您需要在每次回发时将控件重新添加到表单中,因为它不会为您创建

因为LoadControl会将加载控件的每个事件捕捉到当前事件中,所以不可能在与父控件同时运行CreateChildControls,因为此时事件已经发生


在我的例子中,我不能动态添加我的UserControl,所以我做了相反的操作来重现我想要的相同行为。我初始化所有控件,并删除我不想再次单击的控件。这会增加不必要的加载时间,但在我使用它的场景中是可以接受的。

不幸的是,由于先前的控件移动,我无法更早地创建我的控件。因此,我不能使用参数进行回发。
plhContent.Controls.Add(myWebControl);