【问题标题】:How to handle form submission ASP.NET MVC Back button?如何处理表单提交 ASP.NET MVC 后退按钮?
【发布时间】:2011-02-07 08:42:21
【问题描述】:

我有一个表单,允许用户输入数据然后提交。 如果此操作结果一切正常,那么我会将用户重定向回感谢页面。

我现在的问题是,当用户点击后退按钮时,他们将能够返回表单页面并且输入仍然存在。

如果用户再次点击提交,我会遇到一些潜在的奇怪错误。

那么就asp.net mvc而言,处理点击后退按钮的用户的最佳方式是什么?

谢谢!

【问题讨论】:

    标签: asp.net asp.net-mvc back-button


    【解决方案1】:

    使用此代码

    @using (Html.BeginForm("FindResults", "COntrollerName", FormMethod.Get, new { id = "SearchForm" }))
    {}
    public ActionResult Index()
        {
    return view();
    }
    [HttpGet]
        public ActionResult FindResults(FindIssueModel model)
        {
    }
    

    【讨论】:

      【解决方案2】:

      此解决方案适用于整个控制器或特定操作,只需添加 [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 Back button issue

      【讨论】:

        【解决方案3】:

        “潜在的奇怪错误”是什么意思?我怀疑用户会再次单击提交,除非他们想再次发布完全相同的内容。如果您不想重复发帖,请在发帖前对照您的数据库检查内容。

        如果您真的不希望人们两次发布相同的表单,请输入一个随机生成的数字(只要确保它足够随机以避免冲突,或者使用类似用户 ID 的组合)和一个精确的时间戳)到一个隐藏字段中,将其与您的数据一起保存,并在保存任何内容之前检查它是否已存在于您的数据库中。

        【讨论】:

        • 由于 asp.net mvc 是无状态的,我只是在想也许他们也有新的 shebang 方法或最佳实践来处理这个问题。
        • 我不喜欢人们声称某种方法是“最佳实践”。
        • 哈哈是真的,但是有丑陋的黑客,然后有更好的尝试和测试的替代品可供使用。我尽量避免前者。
        猜你喜欢
        • 2012-05-10
        • 2012-04-26
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2010-12-16
        • 2019-11-04
        • 1970-01-01
        相关资源
        最近更新 更多