2012-02-03 1 views
3

ページ上にプログラムで追加された一連のユーザーコントロールがあります(これらはメインページのInitイベント中に作成され追加されます)。これらのコントロールのそれぞれは、独自のInitイベント中にボタンをプログラムで追加します。
(だから、動的に作成されたコントロールの「2つの段階」だ。それが重要かどうかを知るしないでください。)ページ初期化中に、プログラムで追加されたUserControlのviewstateにアクセスする方法は?

しかしこれらのボタンを作成しながら、私はビューステートにアクセスする必要が(私は、ユーザーを覚えてビューステートを使用データ)。

protected void Page_Init(object sender, EventArgs e) 
{ 
    // I need my ViewState right now ! 
    Button myButton = new Button(); 
    myButton.Text = "Click me"; 
    myButton.Command += new CommandEventHandler(myCommandHandler); 
    myButton.CommandName = "Delete"; 
    myButton.ID = "myButtonID"; 
    myPlaceholder.Controls.Add(myButton); 
} 

私は、ViewstateがInitイベント中に利用できないことを理解しました。しかし、Initの後にボタンが作成された場合、ボタンはイベント(OnClickなど)を起動しません。

  • ダイナミックコントロールの作成方法はviewstateに同時にアクセスしますか?

答えて

1

私はできないと思います。理想的ではありませんが、この例ではSessionにユーザーデータを格納します。ダイナミックコントロールは使いづらいので、これはトレードオフの1つだと思います。 ViewStateがPage_Initの後に読み込まれます - forum postが確認します

別のオプションは、自分の隠しフィールドに情報を格納することです。これらは、ポストバック時にRequest.Formコレクションで利用できるようになり、利用可能になります。もちろん、それらをrunat="server"(おそらく必要です)にすると、フレームワークは名前にすべての命名コンテナIDを追加します。そのため、それらを掘り出す際に少し巧妙にする必要があります。しかし、私はセッションに固執するように誘惑されるだろうが、少しハッキーになるだろう

誰か他の人がもちろん異なるかもしれない。

+0

ありがとうございます。隠されたフィールドを使用し、 'Request.Form'でその内容を読むときにはうまくいくようです。なぜ私は動的なコントロールがうまく動作しないのか理解できません。私はそれらを避けようと努力するつもりです^^ –

関連する問題