5

ユーザーがデータを入力して送信できるフォームがあります。このアクションの結果ですべてがうまくいった場合は、ユーザーをサンキュー ページにリダイレクトします。

私の問題は、ユーザーが戻るボタンをクリックすると、フォームページに戻ることができ、入力がまだそこにあることです。

ユーザーがもう一度送信をクリックすると、奇妙なバグが発生する可能性があります。

asp.net mvcに関して、戻るボタンをクリックしたユーザーを処理する最良の方法は何ですか?

ありがとう!

4

3 に答える 3

9

このソリューションは、コントローラー全体または特定のアクションの両方で完全に機能します。[NoCache] を追加するだけです。

 /// <summary>
 /// Prevent a controller or specific action from being cached in the web browser.
 /// For example - sign in, go to a secure page, sign out, click the back button.
 /// <seealso cref="https://stackoverflow.com/questions/6656476/mvc-back-button-issue/6656539#6656539"/>
 /// </summary>
public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var response = filterContext.HttpContext.Response;
        response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        response.Cache.SetValidUntilExpires(false);
        response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        response.Cache.SetCacheability(HttpCacheability.NoCache);
        response.Cache.SetNoStore();
    }
}

そしてあなたのコードで:

[NoCache]
[Authorize]
public class AccountController : Controller
{ ... }

最初にここに投稿されました: MVC 戻るボタンの問題

于 2015-06-21T11:30:09.717 に答える
1

「潜在的な奇妙なバグ」とはどういう意味ですか? まったく同じものをもう一度投稿したくない場合を除き、ユーザーがもう一度送信をクリックするとは思えません。投稿を重複させたくない場合は、投稿する前に DB に対してコンテンツを確認してください。

人々が同じフォームを 2 回投稿したくない場合は、ランダムに生成された番号 (衝突を避けるために十分にランダムであることを確認するか、ユーザー ID と正確なタイムスタンプの組み合わせのようなものを使用してください) を隠しフィールドに入力します。それをデータと一緒に保存し、何かを保存する前にDBにまだ存在しないことを確認してください。

于 2010-04-13T08:58:57.550 に答える