2011-01-27 10 views
2

セットアップ:動的なASP.NETユーザーコントロールの追加ViewState - BUT前LoadViewStateフェーズ

マイページに値が動的に入力されるドロップダウンがあります。どの項目が選択されているかに基づいて、実行時にいくつかのTextBoxが動的に作成されます。ユーザーはテキストボックスに情報を入力し、送信ボタンをクリックします。

問題:

submitボタンからポストバックの後、私はViewStateのロード後に、私のButton_Clickイベントは、ユーザの入力に何でも/保存することができますように、再び動的に(LoadViewState前)にPage_Init中にテキストボックスを作成する必要があります。問題は、ドロップダウンがまだLoadViewStateによって「選択」されていないため、ドロップダウンの選択に基づいてテキストボックスを再作成できません。

だから、ビューステートから読み込んでテキストボックスを作成し、ビューステートにテキストボックスを設定させ、Button_Clickは値を使用することができますか?

私が試みた1つのことは、ビューステートから読み込み、ボックスを作成してからビューステートを再度ロードできるように、LoadViewState関数をオーバーライドすることです。これはうまくいかなかった。なぜなら、デバッガは私のオーバーライドされた関数にヒットしたようには思えなかったからだ。

Protected Overrides Sub LoadViewState(ByVal savedState As Object) 

     MyBase.LoadViewState(savedState) 

     //'Do something like add controls 
     Dim test As String = RecordList.SelectedValue 
     //'Create controls using value "Test" 

     MyBase.LoadViewState(savedState) 

    End Sub 

助けてください。必要に応じてさらにコードを投稿することができます。

おかげで、

デビッド

+0

あなたはコールバックを使用していたり​​、それは完全なポストバックです? –

+0

どのようなイベントでドロップダウン値が入力されますか? – TheGeekYouNeed

+0

これは完全なポストバックなので、ドロップダウン値はもともと別のイベントで作成されていますが、ViewState – Dave

答えて

1
私が直接 UniqueIDプロパティを使用して要求から、ドロップダウンリストの値を取得することをお勧めしたい

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) 
    Dim selectedValue As String = Request.Form(RecordList.UniqueID) 
    ' Recreate your dynamic controls based on the selected value 
End Sub 

Protected Sub Button_Click(ByVal sender As Object, ByVal e As EventArgs) 
    ' Examine dynamic controls and their values (retireved from the ViewState) 
End Sub 
+0

volpavによってポストバックを介して運ばれています。これは完全に機能します。どうもありがとうございました! – Dave

+0

サイドノート、これは回避策ですか、これが適切な解決策ですか?これに関係なく、私はそれを使用します:-) – Dave

+0

@Dave:これは、ASP.NETがページのライフサイクルを管理する方法です。http://msdn.microsoft.com/en-us/library/ms178472.aspx ViewStateがロードされる前に作成されているダイナミックコントロールの状態は、別のコントロールのViewState(すべてのダイナミックコントロールがコントロールツリーに追加された後に読み込まれます)に依存するので、あなたのケースはまれです。しかし、はい、私はこの解決策に頼っています(あなたの場合に関連する欠点は見られません);-) – volpav

関連する問題