- ベストアンサー
ブラウザ画面で値を変更し登録した後、値が元に戻る現象について
- ブラウザ画面で値を変更し登録した後、値が元に戻る現象が時々発生します。この問題はクライアントPC側の問題か、プログラム側の問題か判断することができません。プログラム側のSQL文を確認したところ、画面の値が元の値で更新されています。データテーブルの値はポストバックのタイミングで画面から設定されています。この問題の原因は、BeginEditとEndEditのタイミングか、クライアント側のIEの設定に問題がある可能性があります。
- ブラウザ画面で値を変更し登録すると、時々値が元に戻されてしまいます。この現象が発生するクライアントは複数存在し、OSやIEのバージョンも異なります。プログラム側のSQL文からは、画面の値が元の値で更新されていることが確認できます。データテーブルの値はポストバック時に画面から設定されています。問題の原因は、BeginEditとEndEditのタイミングや、クライアント側のIEの設定に関連している可能性があります。
- ブラウザ画面で値を変更すると、登録後に値が元に戻る現象が時々発生します。この問題の原因はクライアントPC側かプログラム側かを判断することができません。プログラム側のSQL文では、画面の値が元の値で更新されていることが確認できます。データテーブルの値はポストバック時に画面から設定されます。この問題は、BeginEditとEndEditのタイミングやクライアント側のIEの設定に関係している可能性があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
う~ん、いまひとつよくわからないのですが、なかなか非情な実装ですねえ。 親画面から子画面(JavaScript別窓?)をQueryStringつきで開き、子画面Load時にパラメタ拾ってデータを読み画面表示する。 ↓ 子画面側のformから、親画面へのurlをアクションにしてsubmit ↓ 親画面がLoadされたときに遷移先をRequestから取って、子画面経由であればそのRequest内容を拾ってフォームに反映 ↓ 親画面の登録ボタン押す ↓ 登録確認ダイアログ表示 ↓ 登録完了ダイアログ表示 ということだとすると、親画面が子画面から呼び出されて再Loadされたときに、Request判定している時点でコケてますね。 Page_Load時点でのRequestオブジェクト内容をデバグしてみてください。 自分思うに、一番ありそうな話は、ページがキャッシュ状態で開かれてしまい、内容が書き換わらないことです(親画面は開きっぱなしのようなので)。 特に子画面から短時間で登録すると、ブラウザの「リロード」ボタンと同じことになります。 ちゃんとPege_Loadイベントも起きていないかもしれません。 もしそうなら、対策は、親画面中のページディレクティブやMETAタグに、キャッシュ忌避用のパラメタを打ちまくるか、いったん別画面を経由させて親画面をLoadさせることです。
その他の回答 (2)
- aspnet
- ベストアンサー率79% (72/91)
AjaxとかMVCとか、状況がよくわからないのですが、 値を変更して登録ボタン押す ↓ 実行確認ダイアログ出す(onClientClickで出してます?) ↓ OKボタン押す ↓ サーバへフォーム送信される ↓ pageLoadイベント発生 ↓ ボタン等のイベントハンドラ発生 ↓ ブラウザがページを描画 ↓ 登録しました確認ダイアログ表示(JavaScript) という通常のASP.NET Webフォームの流れなら、ポストバックでは、前画面のサーバコントロール値は、必ず再現されなければいけません。でなければMS倒産(笑 この際JavaScriptは関係ないと思われます。 それが不可能ということは、何か間違っています。 ・サーバコントロールではない ・そのサーバコントロールのPostBackを明示的にfalseにしている ・サーバコントロールが動的に追加されたもの また、値を取り出す場所を間違えている場合もあります。 ポストバックは<asp:button>とか<asp:linkbutton>で行っていると思いますので、正しくそのボタンイベントハンドラ内で値を取り出しているか確認してください。 ポストバック後であっても、initイベントやpreloadイベントでは、タイミングによって値がセットされません。
補足
返信ありがとうございます。 説明不足ですみません。 Ajaxは未使用、MVCは(良く判っていませんが、たぶん)未使用です。 後、よくプログラムを見ると、画面へ表示して入力するテキスト(子画面)とDB更新するボタン (親画面)は別フォームでした。 親画面に子画面切り替えするリンクあります。 データセットは2つ、子画面は6画面です。 子画面のPage_Loadで、データセットより画面上の項目へデータ転送して表示しています。 親画面のPage_Loadで、Request.HttpMethodとRequest.UrlReferrer.ToString()を使って、 どの画面より、イベントが来たかで、移動元子画面の項目の値をデータセットへ転送しています。 障害発生するタイミングは、子画面で値変更し、親画面の登録ボタン押し、 登録確認ダイアログ表示(onClientClickではない)し、登録完了ダイアログ表示の際です。 発生する場合と発生しない場合があります。 本番環境で、ほぼ毎回(発生しない場合もあり)、私の居る環境(別会社)では、5台中1台のPCで 10回に1回ほど発生します。
- oboroxx
- ベストアンサー率40% (317/792)
ポストバックした時に、プログラム内で変更されたデータを明示的にテキストボックスなどに再セットしてあげてはどうでしょうか?
お礼
回答ありがとうございます。 ポストバックした時に、前の値に戻っているような気がします。 何が悪いか判別する為に、別のテキストボックスへ値を表示させてみます。 (画面項目数が全部で74項目あって厳しいので、最初は絞り込んだ項目でやってみます) アドバイスありがとうございました。
お礼
回答ありがとうございます。 また、返信が遅くなり大変申し訳ありません。 こちらの質問内容や現象説明に間違いがありました。整理しておきます。 お客様環境で、ほとんどのPCで入力した内容が、時々元の値に戻る場合がある。 社内の環境では、1台のみ発生し頻度も10回に1回程度、他の4台のPCでは発生しない。 画面の構成は、フレームで上部がメニュー的な作りで、画面切り替えとDBへの更新ボタンあり。←前はこれを親画面と書きました。 下部が各画面です(6画面あり)。←前回は、これを子画面と書きました。すみません。 現象は、下部の各画面で入力した内容が上部のDB更新ボタンを押した時に、元の値戻ってしまう現象です。 後、最近分かった事として別サーバでは、再現しないと。 その為、今からサーバのIISの設定の違いや本当に同じプログラムが動いているか調べて行きたいと思います。 以上、ありがとうございました。