2009-03-06 28 views
3

まずは指摘しておきますが、これは簡単な質問ではありません。少なくとも、答えを見つけることは不可能に近い死んでいる。動的に追加されたコントロールとAJAX

UpdatePanelでは、私はパネルコントロールにいくつかのコントロールを動的に追加します。

このすべては、コントロールアシクロンから発生するボタンイベントで発生します。

以下のフィールドの下に、上記のコードに追加します。ボタンがあります。ボタンは、また、更新パネルに配置されます。このボタンは次のように呼び出されます:btn_editShowings

今、私はbtn_editShowings_Clickイベントハンドラに来ると、私の動的追加されたコントロールはもはや存在しません。私はまた、OnInitでそれらをキャッチしようとしましたが、どちらにも存在しません。

どのようにF ...ダイナミックに追加されたコントロールからデータを取得することはこれまで可能ですか? とにかくありますが、これを解決するために何か悪いことを気にしませんか?

UPDATE:私は今、私が読​​んだものからLoadViewState以前のように初期火災を動作するはず次の手順を実行しようとしてい

は私がボタンのイベント

protected void Button2_Click(object sender, EventArgs e) 
    {  
     for (int i = j; i < showno + 4; i++) 
       { 
        UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx"); 
        uc.ID = "showing_" + i; 
        uc.Attributes.Add("runat", "Server"); 
        uc.EnableViewState = true; 
        uc.Visible = true; 
        pnl_showings.Controls.Add(uc); 
       } 
      UpdatePanel1.Update(); 
    } 

でダイナミックないくつかのコントロールを追加し、私は私のinit関数で同じことを行っている: 保護されたオーバーライド・ボイドのOnInit(EventArgsの電子) { base.OnInit(E) ;

 if (Session["ShowingsCount"] != null) 
     { 
      int noOfUCs = (int)Session["ShowingsCount"]; 
      for (int i = 1; i < noOfUCs; i++) 
      { 
       UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx"); 
       uc.ID = "showing_" + i; 
       uc.Attributes.Add("runat", "Server"); 
       uc.EnableViewState = true; 
       uc.Visible = true; 
       pnl_showings.Controls.Add(uc); 
      } 
      UpdatePanel1.Update(); 
     } 
    } 

しかし、私はこのしようとすると:

FindControl("showing_1").Visible = false; 

を私はnull参照の例外を取得します。

最高のお礼 リアルナップスターは、もう一度問題を抱えています。

答えて

2
  1. 初めてコントロールを追加するときは、ビューステートで再作成する必要があるコントロールの数を追跡します。
  2. それ以降のポストバックでは、そのIDを持つページにその数のコントロールをLoadViewStateメソッドに追加してください。

重要なのは、動的に作成されたコントロールをポストバックごとにページに追加する必要があり、フォームスタンドが読み込まれてフォームのポストされた値が再び読み込まれるようにする必要があることです。それら。

+0

LoadViewStateメソッドを入力することはありません。 そのイベントを起こすために何かを行う必要がありますか? –

0
BookShowing bs = (BookShowing)UpdatePanel1.FindControl("showing_" + i); 

解決策はありましたか?OnInitオーバーライドが実際に機能しましたが、私はusercontrolを間違った方法で取得していました。

クローズ。

関連する問題