1

この問題をすべて明確にするために、コントロールの再バインドに起因するものではなく、値はバインド後に初期値のままではありません。

複数のプロジェクトで使用されている aspx ページに DropDownList があります。

ページのライフ サイクルに沿って、SelectedIndexChanged イベントの処理前に SelectedValue が変更されます。

1 つのプロジェクトでは、コードがイベント ハンドラーに到達すると、SelectedValue はクライアントからポストされたものに戻りますが、別のプロジェクトでは新しい SelectedValue が存在します。

どちらの場合もビューステートはオンで、コントロールはリバウンドされておらず、収集できるすべてのものとまったく同じフローに従います。

コントロールは再度初期化されていません。これを徹底的にチェックしたところ、初期値は保持されず、コードで設定された値が保持されました。

最初のプロジェクトで発生しているように、イベントハンドラーの時点で投稿された値が実際に必要ですが、投稿された値に戻る理由と、2番目のプロジェクトでこの動作を複製する方法がわかりません。

これについて不明な点がある場合は、喜んでさらに明確にします。

4

3 に答える 3

2

テストでIsPostBackを使用してページがポストバックされていることを確認しないため、on_load イベントで初期化が 2 回実行される可能性があります。

それはちょうど10分前に私の同僚の一人に起こりました:-)

于 2008-10-07T13:19:40.100 に答える
2

多くの人は、選択した値を保持できるようにするには、DropDownLists で ViewState をオンにする必要があると誤解しています。DropDownLists で EnableViewState を true に設定することはほとんどありません。これは、投稿された値を含むフォームで正常に機能するためです。(そして、DataBinding コントロールで true に設定すると、ビューステートが長くなります)

投稿された値 (ドロップダウンで選択された項目) は、ページのOnInitの後に post-parameters から読み込まれるため、データを OnInit のドロップダウンにバインドすると正常に動作します。

OnLoadでバインドすると、選択した値がオーバーライドされます。

おそらく、選択した値がドロップダウンの DataBind 呼び出しによってオーバーライドされるように、間違ったイベントでデータバインディングを行っていますか?

于 2008-10-07T13:28:33.857 に答える
0

IsPostback をどこかでチェックするのを忘れたときに、通常、この動作が見られます。ページは、SelectedIndexChanged イベント ハンドラーに移動する前に、すべての元のデータを読み込みます。

于 2008-10-07T13:21:41.360 に答える