8

WebフォームWebアプリケーション(asp.net 2.0)があります。ユーザーがフォームを送信すると、送信リンクが実際に消えてしまうため、再度送信することはできません。ただし、F5キーを押すと、データベースに別の挿入が発生する可能性がありますが、これは発生させたくありません。

F5キーを押してページに通知した場合に設定できる設定はありますか?再度送信しないでください。

4

4 に答える 4

14

同じページへのポストバックを行ってから、送信ボタンを除いて同じページをユーザーに再表示する前にデータベースに挿入しているように聞こえますか?

この場合、問題を回避する最も簡単な方法はResponse.Redirect()、同じページに対して a を実行することです。ユーザーが F5 キーを押すと、POST ではなく GET リクエストがページにリロードされます。

説明:

ASP.NET でポストバックを行うと、ブラウザーはPOST 要求をサーバーに送信します。あなたの HTTP メソッドのバックグラウンドはわかりませんが、Web プログラミングに慣れていない場合でも、ブラウザーでのこれらのタイプの要求の影響を経験したことがあるでしょう。Web サイトでフォームを送信して戻るボタンを押すと、「フォーム データを再送信しますか?」のようなメッセージが表示されることがあります。これは、これらのフォームが HTTP POST メソッドを使用してサーバーにデータを送信しているためです。この場合の [戻る] ボタンの効果は、F5 キーを押した場合と同じです。ブラウザはまったく同じ POST 要求を繰り返します (これにはある種のフォーム データが必要です。この場合、最後に送信したのと同じデータです)。時間)。

を使用すると、サーバーはリクエストに応答してHTTP ステータス コード 302 (リソースが一時的に移動されました) をResponse.Redirect()発行しています。次に、ブラウザは、リダイレクト先として指定されたリソース (この場合は、まったく同じページ) に対して GET 要求を発行します。

ページにアクセスすると、リンクからアクセスしたか、アドレス バーに直接入力したかのように返されます。ここで F5 キーを押すと、POST ではなく GET リクエストが発行されます。

Firebug をダウンロードして、「ネット」パネルを有効にすることをお勧めします。ページで行われているすべてのリクエストのリストとともに、リクエスト/レスポンスを構成するものを正確に確認できます。

その他のリソース:

冒険したい場合は、さらに多くのステータス コードを確認できます(ちなみに、ASP.NET のフォーム認証を回避するためのハックとして、現在取り組んでいるアプリケーションで実際に 418 を使用しました)。

Firebug だけでは不十分な場合は、Fiddlerをダウンロードして、実際にリクエストを手作りして好みに合わせて再生することができます。

GET と POST だけでは不十分な場合は、他の方法を使用してアプリケーションの状態を変更できます。RESTful アーキテクチャについて聞いたことがあるかもしれませんが、これは基本的に HTTP メソッドの GET、PUT、POST、および DELETE を意図したとおりに使用します。

于 2010-03-26T21:15:53.790 に答える
5

これを試すことができます。ニーズに合わない場合でも、少なくとも知っておくとよいでしょう。

投稿 - リダイレクト - 取得

http://en.wikipedia.org/wiki/Post/Redirect/Get

于 2010-03-26T23:16:51.483 に答える
0

HttpModule、非表示フィールド、およびいくつかの JavaScript を使用して不要な更新を処理する方法を提示したCode Projectに関するごく最近の記事がありました。適切ではないかもしれませんが、ViewState や Session に依存しない気の利いたソリューションです。

于 2010-03-26T21:18:48.707 に答える
0

いくつかのことができます。ViewState にブール値を格納します。プロパティを確認/設定します。ブール値をセッションに保存し、チェック/設定します。

ポストバック時に値を設定し、値が true の場合、送信を防ぎ、エラーを発生/表示します。

于 2010-03-26T20:40:30.763 に答える