2011-09-15 4 views
1

ラジオボタンの入力に基づいてUserControlをPanelオブジェクトに動的に読み込むaspxページがあります。 UserControlは正常にポストバック時にPanelに正常に追加して表示し、UCでPage_Load()イベントを正常に呼び出しますが、イベントをトリガするような形でフォームとやりとりすると、イベントはポストバックに取り込まれません。カスタムのUserControlをパネルに動的に追加すると、usercontrolがすべてのイベント処理を失う

私は知っている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にバインドされている場合、コントロールはページから削除され、イベントは発生しません。

ご協力いただければ幸いです。

+0

奇妙な場合は、コントロールIDをロードした後、Panelに追加する前にコントロールIDを設定してみてください。 –

+0

ちょうど確認する - 動的に作成されたコントロールがポストバック後に表示されないと言っていますか?または、それらは表示されますが、イベントハンドラはこれらのコントロールに対して機能しません。 –

答えて

1

これは、コントロールが動的に追加されているために発生しています。私は、パネルの代わりにDynamicControlsPlaceHolderを使用することをお勧めします。ページが転記されたときにあなたのコントロールを維持します。

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

他の代替は、ViewStateのがリロードされる前に、すべてのポストバックでコントロールを再作成することです。 OnInitを使用することをお勧めします。

DynamicControlsPlaceHolderはすべての難しい作業を取り除きますので、これが最適なオプションです。

関連する問題