- PR -

[ASP.NET] F5キーで、Submit処理が実行されてしまいます

1
投稿者投稿内容
Maho
会議室デビュー日: 2005/04/06
投稿数: 3
投稿日時: 2005-04-06 19:49
まほといいます。いつも参考にさせて頂いています。
ASP.NETというか、WEB関連の開発もあまり経験がありません。
標題のようなエラーで困っています。


顧客に、Webページに必要な情報を 入力してもらい、[送信]ボタンにて
管理者宛てにメール送信するというような機能を作成しています。

[送信]ボタンを押下し、処理が正常に完了した後、F5キー、または、
IEの[更新]ボタンを押すと、再度処理が実行されてしまいます。
正常処理後、画面上の入力値はクリアしているにもかかわらず、DEBUG
環境にて、テキストエリアの値をみると、クリアしたはずの入力値が保持
されています。そのため、2回、3回、・・・と処理が出来てしまいます。

正直、どういうことなのかわかりません。何卒、ご教示ください。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-04-06 20:10
引用:

Mahoさんの書き込み (2005-04-06 19:49) より:
[送信]ボタンを押下し、処理が正常に完了した後、F5キー、または、
IEの[更新]ボタンを押すと、再度処理が実行されてしまいます。
正常処理後、画面上の入力値はクリアしているにもかかわらず、DEBUG
環境にて、テキストエリアの値をみると、クリアしたはずの入力値が保持
されています。そのため、2回、3回、・・・と処理が出来てしまいます。


エラーではありません。本来WEBアプリケーションとはそう言う物です。更新ボタンを押すと言うことは、現ページを表示する時にサーバーに対して行った要求を再度送信すると言うことです。当然もう再びASP.NETのプログラムが呼び出されます。渡されるパラメータも以前と同じものです。だってそうしないと、同じページが表示されないじゃないですか。

したがって通常は繰り返し呼び出されても問題ないように、サーバー側のロジックを実装します。

_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
Maho
会議室デビュー日: 2005/04/06
投稿数: 3
投稿日時: 2005-04-06 20:39

通常、送信ボタンをClickした場合と、F5キーやIEの更新ボタンが
押された場合との違いはどのように把握できるものなのでしょうか?

送信ボタンが押下された場合のみ、処理が実行されるようにしたい
のですが?いまいちよくわかりません。

ご指南ください。宜しくお願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-04-06 20:46
引用:

Mahoさんの書き込み (2005-04-06 20:39) より:
通常、送信ボタンをClickした場合と、F5キーやIEの更新ボタンが
押された場合との違いはどのように把握できるものなのでしょうか?
ださい。宜しくお願いします。


実際にはF5以外にも、サーバーからのレスポンスを待っている間にボタンを2〜3回クリックすると言った条件でも繰り返し呼び出されます。つくりの悪い掲示板だと、サーバーが重いときに書き込みボタンを複数回クリックすると、クリックした数だけ書き込まれたりしますよね?

それらの呼び出しに通常押された場合との差はまったくありません。したがってサーバー側でSession変数などに状態(送信済みか?)などを記憶しておく必要があります。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 2005-04-07 09:25
引用:

Mahoさんの書き込み (2005-04-06 20:39) より:

通常、送信ボタンをClickした場合と、F5キーやIEの更新ボタンが
押された場合との違いはどのように把握できるものなのでしょうか?


処理の流れを順を追っていけば理解できますよ
1.メール送信画面表示(Client)
  ↓
2.メール送信ボタンクリック(Client)
  ↓
3.PostBackにてサーバにて処理(Server)
  ↓
4.メール送信後の画面表示(Client)
  ↓
5.更新ボタン(F5等)を押下(Client)
  この場合「4.」のみの処理が発生するのではなく、「2.」〜「4.」の処理が繰り返される
  (クライアントとサーバを切り分けて考えないといけない)

対処法としては甕星さんの通りか、もしくはメール送信後の画面は別ページ(Redirect)にする。
但し別ページにしたとしても、送信ボタン2度押しのことを考えるとクリック回数で判別するしかない。
Maho
会議室デビュー日: 2005/04/06
投稿数: 3
投稿日時: 2005-04-07 12:28
返答ありがとうございます。

処理(メール送信処理)実行後、自分自身に対して、Redirectすることによって、
F5キーによる再処理実行を回避することができました。

あと、ボタンの二重押しはクライアント側で制御してます。

これで、無事問題解決しました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)