0

チェックボックスである TemplateField が 1 つあるグリッドがあり、2 つのバインドされたフィールドがあります。

ポストバックの Page_Load で、セッションに保存されたキャッシュされたデータセットでグリッドを再バインドします。ユーザーがグリッドのチェックボックスを選択すると、ポストバック時にグリッドを反復処理してチェックされた値を取得でき、すべて正常に動作します。

ポストバックのグリッド バインディングのコードを Page_Load ではなく OnInit に移動すると、ユーザーがチェックしたチェックボックスのデータが失われます。なんで?oninit の後、ポストバック データをグリッドの上に重ねてはいけませんか?

それはpage_loadで動作します。グリッドを再バインドすると、ポストバックデータを持つグリッドにデータをオーバーレイしていると想定しています。チェックボックス列がバインドされていないため、ポストバックデータを上書きしません。

注: ビューステートはグリッドで無効になっています。ポストバックごとに (セッションに保存された) データをバインドします。また、OnInit を使用している場合、ポストバックがトリガーされたページに関係なく、すべてのポストバックでグリッドの最初のページを取得します。ありがとう。

4

3 に答える 3

1

これは、ビューステートがまだ OnInit イベントに読み込まれていないためだと思います。asp.net ページのライフサイクルの詳細については、http://msdn.microsoft.com/en-us/library/ms178472.aspx を参照してください。それが役に立てば幸い!!

于 2010-08-19T13:51:27.393 に答える
0

LoadViewStateと同様に、ProcessPostDataは、OnInitの後、Page_Loadの前に発生するものです。チェックボックスの値は、投稿データとしてサーバーに返送されると思います。したがって、問題はViewStateが有効になっている場合と同じであると思われます。OnInitが早すぎます。投稿されたデータ(チェックボックスの値)がまだコントロールに適用されていません。

ビューステートを無効にした操作の経験が豊富ではないため、この回答に微妙な違いがない場合はお詫び申し上げます。

于 2010-08-19T17:35:55.673 に答える
0

誰かがasp.netフォーラムでそれに答えました。ここにリンクがあります

http://forums.asp.net/p/1592192/4036031.aspx#4036031

于 2010-08-20T12:26:11.743 に答える