2011-08-25 105 views
0

我做我的研究,发现这个页面:停止刷新,从重新提交表单

How do I stop the Back and Refresh buttons from resubmitting my form?

我宁愿如果我能避免使用后重定向消息获取模式,而不是在形式的一些变量的变化当我第一次提交时。但是,我不知道这将如何完成,因为当您刷新时,您的想法是重新提交刚刚提交的表单。有什么建议么?

+7

你为什么要避免Post/Redirect/Get?这是正确的解决方案。 – thirtydot

+0

+1这是我知道的唯一解决方案 –

回答

3

这通常通过POST请求后的重定向来处理。点击返回将重新将用户重定向。我知道你提到你想避免这种情况,但我看不到任何有效的原因。

1

使用表单在隐藏字段中发送唯一表单标识符,例如UUID。跟踪您已经看到的UUID(可能是每个会话,因此您的数据库不会无限增长或需要偶尔修剪)并默默忽略重新提交。

+0

或缓存提交结果并返回当您获得已经看到的uuid时缓存的内容 – ysth

2

当浏览器被告知刷新时,它会重新发送它发送的最后一个请求。如果最后发送的请求是表单提交,那么表单将被重新提交。这是没有办法的,因为这就是模型的工作原理。

以避免意外的效果,你必须要么:

  • 后期使用重定向消息获得,从而使最后一个请求(即被重新发送的一个)将是一个读取的结果你表单提交而不是表单提交本身 或
  • 在表单中放置一个标识符,以便服务器可以忽略重新提交(虽然用户仍然会看到“是否要重新提交?”确认)

我不是意识到任何其他选择,并且鉴于“更新”的作用方式,我真的不知道还有其他方法。在这两种选择中,post-redirect-get提供了最清晰的用户体验,并且是HTTP动词在理论上最“纯”的用法,所以它通常是首选,而IMO是正确的解决方案。

+0

解释得很好!给了我很多见解,并将我从节点中的“渲染”转变为简单的重定向 – David