2011-10-24 6 views
1

いくつかのテキストボックスといくつかのラジオボックスが内部にあるユーザーコントロールInputDetailsを作成しました。ポストバック時にカスタムユーザーコントロールのビューステートを保存するにはどうすればよいですか?

私がPage_Loadの中に動的に追加します。

if(!Page.IsPostBack()){ 
    InputDetails input = (InputDetails)Page.LoadControl("InputDetails.ascx"); 
    PlaceHolder1.Controls.Add(input); 
} 

が、私はページを更新すると、コントロールが、私はそれがあったことをViewStateにユーザーコントロールを保存する方法、なくなっているので、私は聞いていますのよ追加されたので、次回に自動的にリロードします。さらに、ページがポストバックされたときに、ユーザーコントロールのテキストボックスに入力された値を読み取るにはどうすればよいですか? 1つのページに複数のInputDetailsを追加する必要があるので、保存すると便利です。

+0

のために、このリンクを介して行くだろう、ポストバック-チェックを削除し、それが動作します。動的に作成されたコントロールは、すべてのポストバックで再作成する必要があります。コントロールのIDを手動で変更しないと、ASP.NETは自動的に(TextBox.Textのような)値をViewStateから復元します。 –

答えて

2

ページにコントロールを動的に追加する場合は、各ポストバックの後でコントロールを再作成する必要があります。 (Page.IsPostBack())行を削除し、それが動作するかどうかを確認してください:)。 作成するコントロールごとに、作成するたびに同じID値を設定する必要があります。 他に問題がなければ、ViewStateはポストバック全体でコントロールの状態を保存できるはずです。値を読み出すために

、次のことができます。

  • はあなたが または
  • 使用を必要とする値のTextBox txtBox =(テキストボックスへのアクセスを取得するために、ユーザーコントロールにいくつかのパブリックプロパティを追加)myCustomControlObject.FindControl( "nestedTextBox")(ここでより多くの情報を見つけるために方法:http://msdn.microsoft.com/en-us/library/486wc64h.aspx)を
0

あなたが使用して動的にユーザーコントロール/サーバーコントロールを読み込むことができますAJAXとviewstateには、ビューステートを適切に格納するためのコントロールIDが必要です。ルーカスが述べたように

あなたはplsはmore info

+0

IDが明示的に割り当てられていなくても、動的なコントロールのためにViewStateが保持されます。これは、IDがそのコンテナ内のコントロールの位置(この場合はPLaceHolder)に従って作成されるためです。また、AJAXはこの質問とは関係ありません。 –

関連する問題