6

従来の 3 層設計の Web アプリケーション (ASP.Net 3.5) があります。ユーザーがボタンをクリックすると、ポストバックが発生し、中間層とデータ層のコードが実行され、画面が更新されます。最初のポストバックが完了する前にユーザーがボタンを複数回クリックすると、ロジックが混乱し、アプリが無効な状態になる可能性があります。これを防ぐ最善の方法は何ですか?

JavaScript を使用してボタンを無効にすることはできますが、これは問題を隠すだけです。これを処理するために、ビジネス レイヤーとデータ レイヤーを構築するにはどうすればよいですか?

4

7 に答える 7

2

最も一般的な 3 つの方法 (併用されることが多い) は次のとおりです。

  1. 一度クリック/押された送信ボタンを無効にします。
  2. 戻るボタンの問題を回避するには、 POST+REDIRECT+GETを使用してください。と
  3. ブラウザの履歴を置き換えて、後戻りできないようにします (ただし、これは慎重に、正当な理由で使用する必要があります)。
于 2009-01-26T22:03:56.580 に答える
1

私が残酷に正直に言うと、アプリケーションではなく、Web ポストバックについて混乱しているのはあなたのように思えます (それは、あなたがアプリケーションを作成した場合です)。;-)

とはいえ、他の提案に加えて、この場合に私が行うことは、フォームの非表示フィールドに「トークン」を配置することです-GUIDのように-ポストバックされます。これを使用して、実行中の作業を追跡し、一度だけ使用できるようにします。たとえば、ポストバックするときは、セッション ストレージに配置します。ポストバックが実行されるたびに、最初にセッションでこのトークンを確認し、存在する場合は何もしません。そこにない場合は、セッションに保存して作業を行います。セッションが終了すると、トークンは自動的に破棄されます。簡単。複雑なデータベーストークンよりもはるかに優れています。

  • オイシン
于 2009-01-26T22:12:30.383 に答える
0
  1. クリックしたら送信ボタンを無効にしてください。これにより、偶発的なダブルクリック以上を防ぐことができます
  2. 偶発的/意図的なページの更新を避けるために、私は通常、ポストバック後に別のURLにリダイレクトします。
  3. 最後に、DB挿入メソッドで、挿入を実行する前に、特定の時間枠(おそらく秒単位)内に挿入された同一のデータを確認します。重複データがわずか数秒(または数分。状況に応じて最も意味のあるもの)に挿入されていることがわかった場合は、警告メッセージを表示し、ユーザーがエラーではないと感じた場合は、もう一度送信を押してもらいます。(この方法は、ユーザーアカウントがあり、ユーザーがログイン時にデータを送信している場合に最も効果的であるため、ユーザーに対して重複データチェックが実行されます。)
于 2009-01-26T22:14:46.340 に答える
0

クリックしたときに「送信」ボタンを無効にする Web サイトをすべて見てきました。これは、ユーザーがボタンを複数回クリックするのを防ぐためによく行われます。通常、これは「onclick」JavaScript イベントを使用してボタンを無効にします。ASP.NET では、各サーバー側アイテムには、イベント処理のためにサーバーを呼び出す onclick イベント ハンドラーが既にあります。ASP.NET で同じことを行うには、次のように簡単に実行できます。

btnSubmit.Attributes.Add("onclick", "this.disabled=true;" + GetPostBackEventReference(btnSubmit).ToString());

「btnSubmit」は問題のボタンの名前です。ここで起こることは、2 つのことを行う onclick イベントを作成することです。まず、ユーザーのブラウザのボタンを無効にします。次に行うことは、通常のポストバック イベントをサーバーに送信することです。

于 2012-05-09T05:17:47.243 に答える
0

クリック機能ボタンを無効にするJavaScriptを書く問題を解決しました:

MyButton.Attributes.Add("onclick",
    "javascript:this.onclick=function(){return false;};");
于 2009-07-23T14:32:47.663 に答える
0

同僚の SO'r Dave Wardによる PostBack Ritalinと呼ばれるこの ASP.NET AJAX コントロールを確認してください。

于 2009-04-07T16:46:35.020 に答える