2

ページにLinkBut​​tonがあり、クリックすると、通常の動作で同じページにポストバックされます(F5キーを押すとページを更新すると、ページがPOSTされたことがわかり、ブラウザから確認ボックスが表示されます。入力した使用済み情報を探しています。ページに戻ると、実行したアクションが繰り返される可能性があります。続行しますか?」)

そこで、ユーザーが処理済みのフォームを再送信できないようにするために、同じページにresponse.redirectすることにしました。

void LinkButton1_Click(object sender, EventArgs e) {
    Response.Redirect("Default.aspx"); //redirecting back to the same page
}

私に関する限り、Response.RedirectはGETを使用する必要がありますが、この場合はPOSTを使用しています(リダイレクト後も、フォームを再送信する場合はF5リフレッシュでプロンプトが表示されます)。Response.Redirectが実行されなかったと思われるので、URLを「Default.aspx」から同じサーバーの同じディレクトリにある「HelloWorld.aspx」に変更し、正しくリダイレ​​クトしました。F5キーを押すと、ページを再送信するかどうかを尋ねられることなく、ページがすぐに更新されます。

何が得られますか?私のページには他のコードがありますが、それらがこの動作を引き起こしたとは思えず、ここに投稿するには長すぎます。必要に応じて、私が提供します。これを読んでいただきありがとうございます。

4

2 に答える 2

3

Chromeを使用していますか?Post / Redirect / Getパターンが壊れているように見えるため、Response.Redirect()が発行された場合でも[フォームの再送信の確認]ダイアログが表示されます:https ://code.google.com/p/chromium/issues/detail? id = 21245

次に、Response.Redirect()は常に次のように機能し、例としてDefault.aspxを使用します。

  • ページを開く
  • クライアント:HTTP GET Default.aspx
  • サーバー:HTTP 200 Ok
  • フォームデータを入力し、送信ボタンを押します
  • クライアント:HTTP POST Default.aspx
  • サーバー:HTTP302をDefault.aspxにリダイレクト
  • クライアント:HTTP GET Default.aspx

フォームを使用してサンプルのASP.NETアプリを作成し、を呼び出すイベントハンドラーを含むLinkBut​​tonを追加しました。これは、呼び出し元のページに相対パスを使用し、開発環境と展開環境で機能するため、Response.Redirect(Request.RawUrl)などよりも優先されます。Response.Redirect("Default.aspx")

IEで、フォームにデータを入力して[送信]を押し、次にF5キーを押した後、[フォームの再送信の確認]ダイアログが表示されませんでした。Firefoxと同じです。ダイアログはありません。しかし、Chromeでは、警告を受け取りました。私の唯一の結論は、Chromeの問題が発生している可能性があるということです。

于 2013-03-10T06:55:33.247 に答える
2

何が起こっている

Chromeでこの問題に気づきましたが、FirefoxやIEでは気づきませんでした。

実際、ChromeはGETを実行していますが、POSTとGETを結び付けています。最適化が含まれていると思います。

この動作を確認するにはCtrl-F12、を押して[ネットワーク]タブを表示します。302POSTと200GETがあることに注意してください。

デバッガーが302の後にGETを表示するため、Chromeが何をしているのか正確にはわかりませんが、更新するとフォームの再送信について明確にプロンプ​​トが表示されます。

情報の競合

インターネット、特にStackOverflowでの302リダイレクトに関する重大な誤報があります。

歴史的に、ほとんどのブラウザは、302リダイレクトに遭遇したときにPOSTをGETに変換していました。

ただし、標準によれば、POSTはPOSTのままであり、GETはGET(ソース)のままである必要があります。それにもかかわらず、ほとんどのブラウザは引き続きすべての302をGETに変換します。

通常のブラウジングエクスペリエンスは、すべての追加フォームの再送信ダイアログでより煩わしいため、おそらくこれを行います。おそらくブラウジングも高速です。

それを修正する方法

303リダイレクトは、POST後にアプリケーションをリダイレクトする適切な方法です。

Response.Clear();
Response.Status = "303 See Other";
Response.AddHeader("Location", "MyNewURL");
Response.End();

この方法を使用すると、ブラウザは新しいURLにGETを使用する必要があるため、すべてのブラウザは一貫して動作します。

参考文献

于 2013-03-10T06:47:01.403 に答える