1

簡単な質問があります。Response.Redirect()を使用している場合、ユーザーがリダイレクトをキャンセルすると仮定すると、すべてのページ機能が強制終了されますか?

たとえば、ボタンを押すと「こんにちは」というメッセージがポップアップ表示されるページがあるとしましょう。次に、コードのある時点で、ユーザーはResponse.Redirect()に遭遇します。ブラウザでページがクリアされる前に、ブラウザでSTOPを押します。次に、ボタンをクリックします。それでも「こんにちは」と表示されますか、それともページが機能しなくなりますか?

詳細情報の編集:たぶん私は答えを理解していないだけですが、それでも私の質問に対する答えはありません。もっと正確に言い換えさせてください。

クリックするとC#機能を実行する2つのボタンがあります。それらの1つは、別のページへのResponse.Redirect()を実行します。もう1つは、メッセージボックスに「こんにちは」と出力します。ユーザーがボタン1を押します。response.redirectは処理を開始しますが、ユーザーがリダイレクトされる前に、ユーザーは間違いを犯したと判断し、ブラウザーのSTOPボタンを押しました。ユーザーはまだ同じWebページを見ています。彼らはボタン#2をクリックします。私の質問は、「こんにちは」というメッセージが表示されますか?C#機能は引き続き機能しますか?または、リダイレクトを試みた後、背後のコードにアクセスできなくなりますか?

4

4 に答える 4

1

ブラウザが実際にリダイレクトした場合、またはブラウザを無効にするための特定のコードを配置した場合を除き、2番目のイベントは最初のイベントから完全に独立しています。2番目のボタンをクリックすると、まったく新しいリクエストがサーバーに返送されます。他のボタンが以前にクリックされたという事実は、それに影響を与えません。イベントを自分で明示的に追跡していない限り、それは影響しません。以前に他のボタンがクリックされたことに注意してください。

2番目のボタンは通常どおりに起動し、2番目のC#関数が起動します。2番目のボタンを単独でクリックすることと、最初のボタンをクリックしてブラウザのリダイレクトを停止してから2番目のボタンをクリックすることとの間で、ブラウザに違いは見られないはずです。

于 2012-09-11T08:32:17.610 に答える
1

解決策
ネットワーク接続が遅いユーザーには、最初のページが少し長く表示されます。それらのボタンを誤って押さないようにするだけの場合は、<div>画面領域全体をカバーするように作成し、半透明の画像でグレー表示することができます。ページを更新しない限り、ユーザーはボタンをクリックできません。

この効果は、フォームの送信時にjQueryモーダルダイアログを表示し、データが保存されていることをユーザーに通知することで簡単に取得できます。

このソリューションは、偶発的なクリックを防ぐだけです。悪意のある繰り返しのリクエストを防ぎたい場合は、モーダルダイアログに加えて、サーバー上のアプリケーションの状態を追跡し、保存がすでに行われていることを示す必要があります。これを示すには、単純なセッション変数で十分です。

技術的な説明
Webサーバーで使用されるhttpプロトコルはステートレスです。サーバーにリクエストを送信するたびに、サーバーはこのリクエストを処理するためのPageオブジェクトを作成し、応答を返します。前回何を送信したかは記憶されません。それが必要な場合は、自分で行う必要があります。

「こんにちは」ボタンをクリックすると、C#コードでメッセージを設定します。この要求に応答して、サーバーは応答HTTP/1.1 200 OKの最初の行として成功ステータスメッセージで応答します。Content-Typeこれはブラウザにすべてが正常であることを通知し、返されたヘッダーに基づいて応答を処理します。

ボタンをクリックして別のページにリダイレクトしたとき。ブラウザは最初のページにリクエストを送信します。サーバーを実行するとResponse.Redirect、リダイレクトメッセージがブラウザに返送されます。

HTTP/1.1 302 Found
Location: http://Page2URL

これは、応答を取得するためにこの新しい場所に移動する必要があることをブラウザに通知します。ブラウザは、ロケーションヘッダーで指定されたURLに対して新しいリクエストを行い、応答を取得します。

ユーザーは、これらの段階のいずれかでリクエストを中止できます。httpはステートレスであるため、2つのリクエストを再送信するか、別のボタンをクリックして新しいリクエストを作成できます。サーバーは、これまで何も起こらなかったように、それをasp.netに忠実に送信し、応答を受け取ります。

于 2012-09-11T19:52:20.053 に答える
0

Response.Redirectプロセスは通常、次のとおりです。

  1. alert('hi');ブラウザによってロードされたページ-表示が機能しているのと同じように、すべてのjavascriptタイプのもの。

  2. ユーザーがポストバックを引き起こすボタンをクリックします。

  3. ポストバックのonclickコードはResponse.Redirect、ブラウザにメッセージを送信して別のページをロードします。

  4. ブラウザは新しいページをロードします(1に進みます)。

ユーザーが3から4の間のどこかで[停止]をクリックすると、新しいページは読み込まれず、古いページは引き続きアクティブになります。したがって、そのページのJavaScriptは、次のように引き続き実行可能です。alert('hi');


現在、AjaxとjQueryが関係している特定の状況では、以前に利用可能だったjavascriptが機能しなくなる状況にページが入る可能性があります。しかし、それはあなたが話していたものとは正確には異なります。

于 2012-09-05T21:34:15.827 に答える
0

これは、Response.Redirect()が機能する方法ではありません。

ユーザーがボタンをクリックすると(おそらくサーバーへのPOSTリクエストが発生します)、サーバーからの応答を受信するまで、クライアントでは何も起こりません。応答を生成したコードがResponse.Redirectを呼び出した場合、応答は通常の200ページではなく、300シリーズのリダイレクトになります。ブラウザがリダイレクトを受信すると、ブラウザはリダイレクト先の場所に対して後続のGETリクエストを行います。

POST要求が行われた後、300リダイレクトが受信される前にユーザーが停止ボタンを押すと、ブラウザーはサーバーの応答を無視します。

...ページでJavascriptを実行している場合を除きますが、他のリクエストを行うページと同じです。

于 2012-09-05T21:34:31.727 に答える