コード内で、電子メールが送信された直後に、確認ページへの 302 リダイレクトを実行します。
protected void btnSend_Click(object sender, EventArgs e)
{
SendManyEmails();
Response.Redirect("confirmation.aspx");
}
このようなコードでは、元のページへの POST がブラウザの履歴に残りません。
この一般的なパターンは、Post/Redirect/Get パターンとして知られています。
Post/Redirect/Get を実行するときに状態を維持することに関するボーナス情報
このパターンの主な欠点は、ユーザーをリダイレクトするときに POST 要求の処理からのすべての状態が失われることです。したがって、新しい要求コンテキストが開始されます。ASP.NET では、これにはPageとすべてのControlオブジェクト内のメンバー、および に格納されているすべてのものが含まれますViewState。
POST リクエストの処理中に、何らかの「ステータス オブジェクト」 (送信されたメール メッセージのログなど) を生成する場合、次の GET リクエストのためにこのオブジェクトを保存する何らかの方法が必要になります。一部の Web フレームワークには、これに特化した機能があります: RoR has flash、ASP.NET MVC has TempData. ASP.NET フォームにはそのような概念が組み込まれていないため、自分で何かを理解する必要があります。
オブジェクトをSessionPOST に保存し、次の GET でそれを読み取って削除することは、これを解決する 1 つの方法です。複数の場所で使用する場合は、これを中心に抽象化を構築できます。また、ASP.NET フォーム用の flash/TempData の既存の実装を Web で検索することもできます。