2

ユーザーが自分のページ_mypage.aspx?querystring_にアクセスしたときに、アドレス バーにクエリ文字列を残したくないのは、更新時にその値に依存するアクションを繰り返したくないからです。
クエリ文字列から値を取得して同じページに投稿しようとしましたが、ほとんど同じ効果が得られます。更新すると再投稿されます。

値をハッシュ (#) に追加してリダイレクトしようとしましたが、ハッシュ値がサーバーに返されません。

私のオプションは何ですか?データを保持したまま、投稿せずに別のページまたは同じページにリダイレクトするにはどうすればよいですか?

4

4 に答える 4

4

同じ Web サイト内にいる場合は、 を使用Sessionしてデータを保存できます。

HttpContext.Current.Session["asdf"] = someObject;

オブジェクトとして保存されるため、適切にキャストする必要があります。

于 2013-04-19T19:28:42.997 に答える
2

Post/Redirect/Getパターンを使用する

ASP.NETでは、@ gunr2171 による回答で説明されているように、Session を使用できます。

ASP.NET MVCでは、TempData を使用できます。

最終ページで複数回の画面更新をサポートするには、次のTempData.Keep()メソッドを使用できます。

TempData.Keep("TempDataKeyValue1");
SomeModelClass model = (SomeModelClass)TempData["TempDataKeyValue1"];
于 2013-04-19T19:32:37.350 に答える
2

セッションは、クエリ文字列または POST 変数の外で値を「渡す」ためによく使用されるメカニズムです。

Session["test"] = "Test word";
string test = (string)Session["test"];

ただし、状況を処理する最善の方法が必要な場合は、POST-REDIRECT-GET パターンを調べる必要があることをお伝えします。http://en.wikipedia.org/wiki/Post/Redirect/Get

基本的に、データを更新する主なアクションは POST を通じて処理されます。それが成功した場合は、GETにリダイレクトします。これには、クエリ文字列パラメーターが含まれています(「updated = True」など)。

このようにすると、ユーザーが実際のデータ保存アクションを誤ってまたは意図的に再トリガーすることができなくなります。これは、ユーザーがランディング ページ (GET ページ) をリロードしても、データが変更されず、確認メッセージが残るためです。同じ。

于 2013-04-19T19:31:12.943 に答える
1

あなたの後に何らかの形で適用できる場合は、クエリ文字列を使用してリクエストを取得したときにアクションを実行し、最後にクエリ文字列を使用せずに URL (同じ) にリダイレクトします (Post-Redirect-Get)。

ただし、Cookieを使用することもできます。

  1. サーバーはクエリ文字列の URL を受け取ります
  2. サーバーはクエリ文字列なしで URL にリダイレクト応答を送信し、クエリ文字列を含む Cookie を追加します
  3. サーバー レシーバーの URL はクエリ文字列なしで、Cookie あり
  4. サーバーは Cookie 値に基づいてアクションを実行し、Cookie を削除して、アクションの結果を表示する最終応答を送信します。

ページを更新すると、Cookie はなくなります。

于 2013-04-19T19:36:24.273 に答える