• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ブラウザ画面で、変更した値が元に戻る場合が時々あり、困っています。)

ブラウザ画面で値を変更し登録した後、値が元に戻る現象について

このQ&Aのポイント
  • ブラウザ画面で値を変更し登録した後、値が元に戻る現象が時々発生します。この問題はクライアントPC側の問題か、プログラム側の問題か判断することができません。プログラム側のSQL文を確認したところ、画面の値が元の値で更新されています。データテーブルの値はポストバックのタイミングで画面から設定されています。この問題の原因は、BeginEditとEndEditのタイミングか、クライアント側のIEの設定に問題がある可能性があります。
  • ブラウザ画面で値を変更し登録すると、時々値が元に戻されてしまいます。この現象が発生するクライアントは複数存在し、OSやIEのバージョンも異なります。プログラム側のSQL文からは、画面の値が元の値で更新されていることが確認できます。データテーブルの値はポストバック時に画面から設定されています。問題の原因は、BeginEditとEndEditのタイミングや、クライアント側のIEの設定に関連している可能性があります。
  • ブラウザ画面で値を変更すると、登録後に値が元に戻る現象が時々発生します。この問題の原因はクライアントPC側かプログラム側かを判断することができません。プログラム側のSQL文では、画面の値が元の値で更新されていることが確認できます。データテーブルの値はポストバック時に画面から設定されます。この問題は、BeginEditとEndEditのタイミングやクライアント側のIEの設定に関係している可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • aspnet
  • ベストアンサー率79% (72/91)
回答No.3

う~ん、いまひとつよくわからないのですが、なかなか非情な実装ですねえ。 親画面から子画面(JavaScript別窓?)をQueryStringつきで開き、子画面Load時にパラメタ拾ってデータを読み画面表示する。 ↓ 子画面側のformから、親画面へのurlをアクションにしてsubmit ↓ 親画面がLoadされたときに遷移先をRequestから取って、子画面経由であればそのRequest内容を拾ってフォームに反映 ↓ 親画面の登録ボタン押す ↓ 登録確認ダイアログ表示 ↓ 登録完了ダイアログ表示 ということだとすると、親画面が子画面から呼び出されて再Loadされたときに、Request判定している時点でコケてますね。 Page_Load時点でのRequestオブジェクト内容をデバグしてみてください。 自分思うに、一番ありそうな話は、ページがキャッシュ状態で開かれてしまい、内容が書き換わらないことです(親画面は開きっぱなしのようなので)。 特に子画面から短時間で登録すると、ブラウザの「リロード」ボタンと同じことになります。 ちゃんとPege_Loadイベントも起きていないかもしれません。 もしそうなら、対策は、親画面中のページディレクティブやMETAタグに、キャッシュ忌避用のパラメタを打ちまくるか、いったん別画面を経由させて親画面をLoadさせることです。

gogosurfin
質問者

お礼

回答ありがとうございます。 また、返信が遅くなり大変申し訳ありません。 こちらの質問内容や現象説明に間違いがありました。整理しておきます。 お客様環境で、ほとんどのPCで入力した内容が、時々元の値に戻る場合がある。 社内の環境では、1台のみ発生し頻度も10回に1回程度、他の4台のPCでは発生しない。 画面の構成は、フレームで上部がメニュー的な作りで、画面切り替えとDBへの更新ボタンあり。←前はこれを親画面と書きました。 下部が各画面です(6画面あり)。←前回は、これを子画面と書きました。すみません。 現象は、下部の各画面で入力した内容が上部のDB更新ボタンを押した時に、元の値戻ってしまう現象です。 後、最近分かった事として別サーバでは、再現しないと。 その為、今からサーバのIISの設定の違いや本当に同じプログラムが動いているか調べて行きたいと思います。 以上、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • aspnet
  • ベストアンサー率79% (72/91)
回答No.2

AjaxとかMVCとか、状況がよくわからないのですが、 値を変更して登録ボタン押す  ↓ 実行確認ダイアログ出す(onClientClickで出してます?)  ↓ OKボタン押す  ↓ サーバへフォーム送信される  ↓ pageLoadイベント発生  ↓ ボタン等のイベントハンドラ発生  ↓ ブラウザがページを描画  ↓ 登録しました確認ダイアログ表示(JavaScript) という通常のASP.NET Webフォームの流れなら、ポストバックでは、前画面のサーバコントロール値は、必ず再現されなければいけません。でなければMS倒産(笑 この際JavaScriptは関係ないと思われます。 それが不可能ということは、何か間違っています。 ・サーバコントロールではない ・そのサーバコントロールのPostBackを明示的にfalseにしている ・サーバコントロールが動的に追加されたもの また、値を取り出す場所を間違えている場合もあります。 ポストバックは<asp:button>とか<asp:linkbutton>で行っていると思いますので、正しくそのボタンイベントハンドラ内で値を取り出しているか確認してください。 ポストバック後であっても、initイベントやpreloadイベントでは、タイミングによって値がセットされません。

gogosurfin
質問者

補足

返信ありがとうございます。 説明不足ですみません。 Ajaxは未使用、MVCは(良く判っていませんが、たぶん)未使用です。 後、よくプログラムを見ると、画面へ表示して入力するテキスト(子画面)とDB更新するボタン (親画面)は別フォームでした。 親画面に子画面切り替えするリンクあります。 データセットは2つ、子画面は6画面です。 子画面のPage_Loadで、データセットより画面上の項目へデータ転送して表示しています。 親画面のPage_Loadで、Request.HttpMethodとRequest.UrlReferrer.ToString()を使って、 どの画面より、イベントが来たかで、移動元子画面の項目の値をデータセットへ転送しています。 障害発生するタイミングは、子画面で値変更し、親画面の登録ボタン押し、 登録確認ダイアログ表示(onClientClickではない)し、登録完了ダイアログ表示の際です。 発生する場合と発生しない場合があります。 本番環境で、ほぼ毎回(発生しない場合もあり)、私の居る環境(別会社)では、5台中1台のPCで 10回に1回ほど発生します。

全文を見る
すると、全ての回答が全文表示されます。
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

ポストバックした時に、プログラム内で変更されたデータを明示的にテキストボックスなどに再セットしてあげてはどうでしょうか?

gogosurfin
質問者

お礼

回答ありがとうございます。 ポストバックした時に、前の値に戻っているような気がします。 何が悪いか判別する為に、別のテキストボックスへ値を表示させてみます。 (画面項目数が全部で74項目あって厳しいので、最初は絞り込んだ項目でやってみます) アドバイスありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++ ブラウザに値をセットしたい

    c++のクライアントプログラムから、 ブラウザのテキストボックスに対して、 値をセットさせたいです。 自分の持ってるイメージは、 【1】 今、OS上で起動しているプロセスの名を取得する。 【2】 各ブラウザがプロセスとして起動しているときの名称で、 (IE8.0、IE9.0などの名称) その一覧上にヒットするものがあるかを検索 【3】 最初にヒットした該当ブラウザが開いている各タブが、 「データを突っ込みたいページのURLかどうかをチェック」 【4】 値をセット 【5】 submitを実行 と考えていますが、実装に使う関数の見つけ方もわからず困っています。 またwindowsのバージョン等によって、書かなければならないコード変わったりもするのでしょうか? (APIが違ったりということも有り得るのかなぁと。。)

  • 複数のテーブルを参照して値を変更する方法

    お世話になっております。 以下のようなテーブルがあったとして、table1,table2の値を参照して加算し、master_tableの値を変更するようなSQLは一つの文で書く方法はありますでしょうか? 例えば、あるSQLを実行すると、master_tableのid1のscoreが500になるようなSQLです。 どなたかご教授ください。 master_table id | score 1 | 0 2 | 0 table1 id | score 1 | 100 2 | 300 table2 id | score 1 | 400 2 | 100

    • ベストアンサー
    • MySQL
  • 画面から画面へ値1つずつ複数回受け渡しすべてを表示

    タイトル: 子画面から親画面へ値を1つずつ複数回受け渡してすべてを表示するにはどうすればよいでしょうか 内容 はじめまして。 こんにちは DIK です。 私、VisualStudio2013web のASP.netでWebアプリケーションを作成しております 使用言語は Server言語:C# Script言語:JavaScript Sql言語:PostgleSQL クライアント言語にHTML関連他、jQuwery なんかも使っております。 ご質問がありまして、ご教授いただけませんでしょうか・ 内容をざっくり申しますと、画面から画面へ値1つずつ複数回受け渡しすべてを表示することです。 もう少し詳しく解説しますと 親画面と小画面があり、値の受け渡しを行います。 親画面は値の受け取り、子画面が値の渡します 1.子画面を開き、SQLでDBの値を検索してすべてのレコードを表示させます。 2.子画面でDBjのデータが複数表示されている状態で一件データを選択します 3.そのデータを親画面に値を一件送り表示させます。 4.親画面に表示されている状態で、子画面からデータを新たに選択をします 5.そのデータを送ります。 6すると、3で送ったデータ(値)と5で送った値の両方が親画面に表示される このようにするにはどのようにするとよいでしょうか。 方法としてはSessionやApplication変数を使用して送る方法を行いました。 子画面(ポップアップウインドウ)側 ```C# //DataGridで表示したDBの値の取得文(位置セル分の値) //codeはDBで取得した値の1件分のデータです。          String code = MyGrid.Items[e.Item.ItemIndex].Cells[0].Text;         ArrayList data = new ArrayList(); data.Add(code); for (int d = 0; d < data.Count; d++) { String Gridcode = ""; Gridcode+= Convert.ToString(" or goods_code ='" + (String)data[d]) + "'"; Session["Gridcode"] = Gridcode; Application["Gridcode2"] = Gridcode;  } //親画面リロード //再選択へ戻る ``` 親画面側 ```C# //方法1 string Gridcode = (string)(Session["Gridcode"]); string sql = ""; sql += " select goods_name, goods_code from MST_goods "; sql += "where goods_code =''"; sql += "" + Gridcode + ""; //方法2 string Gridcode2 = (string)(Application["Gridcode2"]);      string sql = ""; sql += " select goods_name, goods_code from MST_goods "; sql += "where goods_code =''"; sql += "" + Gridcode2 + ""; ``` 結果は Session["Gridcode"] = Gridcode; Application["Gridcode2"] = Gridcode; の値が子画面から渡すと上書きされてします。 またArrayListで回している値が毎回1データのみになっています 値を複数複数回で複数件回して受け渡すように記述しようとしました ほかに良い方法はありませんか? なおD子画面で選択した値をDB格納させて親画面でDBに格納したデータをすべて取得する方法では実現できますが 条件としては与えられたDBテーブル情報を変更せずに行うことです。そのため値を送るためのDBを作ることができません。 その他の処理は画面操作が同じ動きをできれば、どんな方法を使用しても構いませんということで作成をしております 非常に困っております 長々となってしまい、文章に誤字や説明不足など至らない点があるかと思われますが どなたかご教示お願い致します。 最後に 画面遷移方法をお伝えします 1.らC#側にJavaScriptの処理をさせて画面の開閉を行う 2.子画面はポップアップウインドウです 開き方は、親画面から Window.open() で子画面を開く           C#側に ```C# string startupScript = ""; startupScript += "<script language='JavaScript'> window.open()"; startupScript += " <" + "/script>"; ClientScript.RegisterStartupScript(this.GetType(), "startup", startupScript); ``` の記述をしております 処理を行い子画面からなんだかの処理Reloadで親画面に処理を送る           C#側に ```C# string startupScript = ""; startupScript += "<script language='JavaScript'>   window.opener.location.reload()"; startupScript += " <" + "/script>"; ClientScript.RegisterStartupScript(this.GetType(), "startup", startupScript); ``` の記述をしております この処理によってポップアップウインドウを操作して元画面に値を送る処理を行えました    

  • TextChangeイベントが発生しない

    ASP.NETで開発を行っています。 クライアント側の処理はJavaScript、サーバー側の処理は VB.NETを使っています。 サーバー側であるテキストボックスに対してT extChangeイベントを発生させたいのですが、 クライアント側の処理で値を入力したときは、 イベントが発生しません。 サーバー側で値を変更したときは発生します。 具体的な手順は以下のとおりです。 Cookieから取得した値をテキストボックスにセット ↓ この時点でTextChangeイベントを発生させたいが、何も起こらない。 ↓ サーバー側の処理でそのテキストボックスの値を変更する。 ↓ この時点でTextChangeイベントが発生。 また画面上で直接値を入力したときはイベントが発生します。 クライアント側の処理でテキストボックスに入力した場合は、 サーバー側のイベントは発生しないのでしょうか。 この処理の中で値が入力された時点でイベントを発生させる にはどうしたらいいのでしょうか?

  • ブラウザの画面印刷について

    ブラウザの画面印刷について教えてください。 「ページ設定」の余白を”0”にして、ある画面を印刷しています。 今までIE5で印刷していたのですが、これをIE6にバージョンアップしたら 余白を”0”に設定できなくなりました。 フチなし印刷可能のプリンターなら”0”に設定できるようなのですが、 フチなし印刷できないプリンターだと、一旦”0”にしても、もう一度 設定を見ると値が元に戻ってしまいます。 なんとか余白を”0”に設定して印刷する方法はないでしょうか? よろしくお願いします。

  • 休止状態から回復すると画面解像度が変更してしまう

    ウインドウズXPです。休止状態から 回復すると 画面解像度が勝手に変更されてしまいます。 必ず起きるわけでもなく時々起きる現象です。そのたびにコントロールパネルから元に戻します。 購入後1年くらいたちますが今まではなかった現象です。 勝手に変更しないようにしたいのですが よろしくお願いします。

  • 2回目に画面のレコードセットの値が読めない

    メインフォームとサブフォームの画面゛て レコードソースは、ワークテーブルを参照し メインフォームの保存ボタンの処理で、 Private Sub 保存ボタン_Click()  Set mySubFm = Me![テーブル子].Form  Set myParFm = Forms(Me.name) '<== 親フォーム  Set Rec1 = myParFm.RecordsetClone  Set Rec2 = mySubFm.RecordsetClone  Lng受注ID = Rec1.Fields("受注ID").Value  Dim Rtn As Integer  ・レコードセットのデータを、本テーブルに更新する処理  ・自動採番した番号を、レコードセットのIDのフィールドにセット   Rec1.Edit   Rec1.Fields("ID").value = newID   Rec1.Update  ・Me.Requery '<== メインフォームの画面を更新  ・mySubFm.Requery '<==サブフォームの画面を更新  Set Rec1 = Nothing   Set Rec2 = nothing End Sub この処理を一度行い、更に、画面のサブレコードの値を変更して、保存ボタンを再度押すと、 Lng受注ID = Rec1.Fields("受注ID").Value の行で、 「オブジェクトが正しくないか、現在設定されていません」というエラーになります。 この原因はどうしたら解決出来ますでしょうか? よろしくお願いします。

  • 時々PCの画面が暗くなります

    同様のタイトルはたくさん見かけましたが、どれも違うので投稿しました。 [環境] VISTA Home edition デスクトップタイプのカスタムPC マザーボード:ASUS P5K-E [電源オプションの設定] バランス ディスプレイの電源を切る:20分 コンピュータをスリープにする:1時間 60分経過後にスリープ ハイブリッドスリープ:ON 休止状態:なし USBの選択的な中断の設定:有効 状況に応じたディスプレイの設定:ON [現象] ディスプレイの画面がときおり暗くなる。 暗くなった後は、マウスを動かすと復帰する。 しかし、マウスを使っていても、画面がいきなり暗くなる。 この、”時々暗くなる現象”を解消したいと思っています。 切り分けがつけられておりませんが、アドミニ権限を有する私のアカウントでは一度も発生しておりません。しかし、別のアカウントでログインしている際に発生します。 発生する時は頻繁に、しない時は暫く全然出ません。 また、明るくなった直後に、"nap mode 何とか"って表示されているように思います。一瞬なので・・・?ですが。 以上、ヒントでも良いので何かアドバイスお願い致します。

  • XP ログオン画面の変更

    XP ログオン画面の変更 XP SP3です。 ログオン画面が何かの拍子に従来のアカウント名並んでいる’ようこそ’画面から、ユーザ名とパスワードを入れる画面に変わってしまいました。従来のアカウントをクリックする方式にもどしたいのですが? [コントロール パネル] -> [ユーザー アカウント] -> [ユーザーのログオンやログオフの方法を変更する] をクリックすると、「NetWare用クライアント サービスによって、ようこそ画面ユーザの簡易切り替えが無効になりました。これらの機能を元に戻すには、NetWare用クライアント サービスをアンインストールしてください。」で止まっています。 NetWare用クライアント サービスをアンインストールする方法を教えてください。 なお、最終目標は、最初に書いたログオン画面の変更です。

  • VC++2008にて、画面の動的変更処理について

    現在VC++2008のMFCにて開発を行っております。 ダイアログのテキストボックスAの値を変更し、 カーソルが移動した際に 他のテキストボックスBの値を、Aの値により処理がかかる のような処理は無理なのでしょうか? やはり、ボタン押下でしか画面の更新は無理なのでしょうか? ご教授頂ければ幸いです。