asp.netページにチェックボックスリストとテキストボックスコントロールがあり、動的に作成されてページに追加されます。値を入力してフォームを送信すると、サーバーに到達するまでに値が空になります。何か助けはありますか?
2 に答える
ページのライフサイクルの後半で再作成されているため、それらは空です。
コントロールを追加するASP.NET ページ ライフサイクルの正確なポイントを知らなくても(Page_Load またはイベント ハンドラーのいずれかだと思いますが)、次のようになります。
- ビルド コントロール ツリー
- 動的コントロールを追加する
- 与える
(ポストバック)
- ビルド コントロール ツリー
- ビューステートを再構成し、Post 値にバインドする
- 動的コントロールを追加する
- 与える
これを解決するには、ライフサイクルの早い段階でコントロールを作成する必要があります。標準的な方法は、「コントロールの作成」を別のメソッドに分割し、CreateChildControls 中に作成する必要があるかどうかを確認することです。
override CreateChildControls()
{
if(IsPostBack)
{
EnsureDynamicControlsAreAdded();
}
}
このように、イベント ハンドラー (Button_Click など) としてライフサイクルの後半に何かによって最初に追加する必要がある場合は、EnsureDynamicControlsAreAdded
そこから同じメソッドを呼び出すこともでき、次のラウンドトリップでそれらを呼び出します。ずっと前に作成されます。
Rex M の回答に加えて、" " イベントでコントロールを作成してみることができます。Page_Init
これは、ページ ライフサイクルの最初のイベントの 1 つであり、ビューステートレス ページで通常コントロールを作成する場所です (NB: これを行うと、 Page_Init ハンドラーのコンテンツを " if (!IsPostback)
" で囲まないでください。意図したとおりに機能しなくなります)。