2009-03-06 11 views
2

私はいくつかのWebコントロールをCreateChildControlsメソッドで動的に動かすユーザーコントロールを持っています。 のようなページには、このコントロールを使用した:それは完璧に動作コントロールをページに動的に追加されたユーザーコントロールに移動するにはどうすればよいですか?

<myControls:MyUserControl runat="server" ID="myUserControl" /> 

しかし、私のようなページに動的にユーザーコントロールを追加する場合:コントロールコレクションがDataBindを中に変更することができません:それはエラーで私のCreateChildControlsの内側にクラッシュ

protected void btnAdd_Click(object sender, EventArgs e) 
{ 
    MyUserControl myUserControl =(MyUserControl)LoadControl("~/Controls/MyUserControl.ascx"); 
    myUserControl.ID = "test"; 
    plhControls.Controls.Add(myUserControl); 
} 

<asp:UpdatePanel runat="server"> 
    <ContentTemplate> 
     <asp:PlaceHolder runat="server" ID="plhControls" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:Button runat="server" ID="btnAdd" OnClick="btnAdd_Click" /> 

は.cs 、Init、Load、PreRender、またはUnloadフェーズを実行します。

私は私のユーザーコントロール内のプレースホルダにWebBrowserコントロールを追加するとき、正確なラインは次のとおりです。

plhContent.Controls.Add(myWebControl); 

私が追加したときに、この場合には、私はCreateChildControlsのイベント内のWebコントロールを移動することはできませんなぜだから私は理解していません私のUserControlを動的に。

答えて

1

LoadControlはロードされたコントロールのすべてのイベントを現在のイベントに追いつくので、イベントがすでにその時刻に発生して以来、親と同時にCreateChildControlsを実行することは不可能です。

私の場合、私は動的に私のUserControlを追加することはできませんので、私は望んだのと同じ振る舞いを再現するために逆を行いました。すべてのコントロールを初期化し、OnClickが必要ないコントロールを削除します。これは不必要な読み込み時間を追加しますが、使用するシナリオでは許容されます。

0

コントロールは初期化され、 "ページのライフサイクル"に関する限り、他のコントロールと一緒に操作する必要があります。 Page.LoadControlメソッドを見て、以前にコントロールを作成することが可能かどうかを確認してください。

時々使用する方法では、ページのポストバックパラメータを使用します。あなたのために作成されないので、ポストバックごとにフォームにコントロールを再追加する必要があることを忘れないでください。

+0

残念ながら、以前のコントロールの動きのため、私は自分のコントロールを先に作成できません。したがって私はポストバックのためのパラメータを使用することはできません。 –

関連する問題