4

UserControl複数の TextBoxes を動的に作成する があります。TextBox の数は、ユーザーの選択によって異なります。TextBoxそれぞれのID をUserControlのオブジェクトに格納してViewState、ポストバックごとに一貫して再作成できるようにすることにしました。

Page_Init(推奨されるように)中に動的コントロールを再作成すると、UserControlsViewStateまだ入力されていません。

動的コントロールを再作成した場合、Page_LoadまたはイベントPreLoad後までポストバック値が再水和されないPage_Loadため、ページ ライフサイクルの後半まで正しい値にアクセスできず、問題が発生します。

これに対するより良いアプローチはありますか?

4

3 に答える 3

0

msdn http://msdn.microsoft.com/en-us/library/ms178472(VS.100).aspxで指摘されているように; InitComplete イベントを使用してビューステート データにアクセスできます。ただし、ビューステート データが大きくなり、全体的なパフォーマンスの問題が発生する場合があります。または、セッション オブジェクトまたは非表示のコントロールを使用してデータを保存することもできます。

于 2013-09-11T11:49:52.900 に答える
0

オーバーライドCreateChildControlsが進むべき道のようです。ページ ライフ サイクルの同じ時点で呼び出されるとは限りません。http://msdn.microsoft.com/en-us/library/aa719775%28VS.71%29.aspxを参照

CreateChildControls メソッドは、ASP.NET ページ フレームワークがコントロール ツリーを作成する必要があるときに呼び出され、このメソッド呼び出しはコントロールのライフサイクルの特定のフェーズに限定されないため、表には記載されていません。たとえば、CreateChildControls は、ページの読み込み中、データ バインディング中、またはレンダリング中に呼び出すことができます。

ただし、これはベスト プラクティスのようです ( 「しなければならない」場合は asp.net CreateChildControls()? を使用します)、それと組み合わせると、データが利用可能EnsureChildControls()な適切なタイミングで常に呼び出されViewStateます。

于 2013-09-11T13:24:37.627 に答える