2011-07-25 9 views
0

「なぜ」コントロールがポストバック時に消えてしまったことを理解しています。これまでページ初期化で動的に行う必要があるものを作成するだけで大​​きな成功を収めました。しかし、私は、既存のドロップダウンリストの値に基づいてasp.netページにいくつかのコントロールを追加しなければならないとき、私のために分断されました。ダイナミックコントロールのシリアライズとリロード

私の質問は簡単ですし、良いコード例を見つけることができないようです。ドロップダウンリストの値に基づいてページにいくつかのコントロールを追加する必要があります。次に、これらの追加されたコントロールを他のポストバック(セッションは問題ありません)全体に保持します。 Dynamically Adding Controlsは、私はすべてのコントロールをシリアル化するための構文に苦しんでいます、など

これを制限することができます。私はこの関連の記事を見つけた

protected void Page_Init(System.Object sender, System.EventArgs e) 
    { 
     RebuildPlaceholder(); 
    } 

    protected void ddlGroup_Change(System.Object sender, System.EventArgs e) 
    { 
     ExampleDataContext ctxExample = new ExampleDataContext(); 
     var aryExample = (from rslt in ctxExample.mvExample 
          where rslt.label.ToLower() == ddlGroup.SelectedValue 
          select rslt); 

     foreach (var objExample in aryExample) 
     { 
      TextBox txtCreated = new TextBox(); 
      txtCreated.ID = "ddl" + objExample.ID; 
      plcExample.Controls.Add(txtCreated); 
     } 

     StorePlaceholder(); 
    } 

    private void StorePlaceholder() 
    { 
     //Need code to store all controls in a placeholder. 
    } 

    private void RebuildPlaceholder() 
    { 
     //Need code to rebuild all of the controls from Session. 
    } 

:ここ

はのオフ動作するスニペットですページ上に既に存在する単一のプレースホルダーの子コントロールに、そのプレースホルダーのコントロールを保存/復元するだけです。

このバージョンを4.0で使いやすくしたものがあれば、どのバージョンのASP.NETでも問題ありません。

答えて

0

代わりにドロップダウンリストの選択をキャッシュしてみてください。次に、次のページの読み込み中にキャッシュを使用して、選択した値を設定します。次に、その選択に基づいて新しいコントロールをロードします。

Session["CacheKey"] = DropDownList1.SelectedValue; 

は、次にセッション・キャッシュにアクセスするには:

var value = Session["CacheKey"]; 

このMicrosoftの記事 on ASP.NET Caching

0

を見てみましょうDropDownList.SelectedValueがPage.Init時に利用できないことを、私を見つけました。しかし、あなたはまだRequest[ddl.UniqueID]で値にアクセスし、すべてのダイナミックコントロールを作成して追加することができます。

ハックのような感じですが、ASP.NETページのライフサイクルでは、特にコントロールがシリアル化可能でない場合は、多くの選択肢が許可されていません。

関連する問題