一部のWebコントロールをCreateChildControlsメソッド上で動的に移動するユーザーコントロールがあります。このコントロールを次のようなページに使用する場合:
<myControls:MyUserControl runat="server" ID="myUserControl" />
それは完璧に動作します。
しかし、そのuserControlを次のようなページに動的に追加したい場合:
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:PlaceHolder runat="server" ID="plhControls" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnAdd" OnClick="btnAdd_Click" />
.cs
protected void btnAdd_Click(object sender, EventArgs e)
{
MyUserControl myUserControl =(MyUserControl)LoadControl("~/Controls/MyUserControl.ascx");
myUserControl.ID = "test";
plhControls.Controls.Add(myUserControl );
}
CreateChildControls内で次のエラーでクラッシュします:DataBind、Init、Load、PreRender、またはUnloadの各フェーズではコントロールコレクションを変更できません。
正確な行は、UserControl内のプレースホルダーにwebControlsを追加したときです。
plhContent.Controls.Add(myWebControl);
そのため、この場合、UserControlを動的に追加すると、CreateChildControlsイベント内でWebコントロールを移動できない理由がわかりません。