快速提问,我已经尝试过自己解决这个问题,但在尝试弄清楚页面重新加载和执行/不做它应该做的事情的原因或方式时,使用会话变量会让人感到困惑。
在任何(非脚本化)环境下,页面是否重新加载(使用JavaScript,f5,ctrl + f5,浏览器重新加载按钮等)会导致表单重新发布?
(这适用于在C#代码中使用IfPost分支,如下面的示例代码所示):
if(IsPost)
{
//stuff that only executes if the previous request was a post.
}
我只需要知道在这里期待什么,这样我就可以正确诊断会话状态问题。
感谢您的帮助!
(另外,如果我过分简化这个问题,请对不起。我意识到它可能比简单的答案更复杂)。
的 的 ** * ** * 更新的 * ** * ** * ** * 此外,我在StackOverflow上查找了这个问题的副本,但我没有看到任何内容,所以如果这是一个重复的问题,我道歉。
这里的两个答案都是很好的答案。我接受了答案,也提出了我的问题的解决方案,虽然PRG不是“唯一”的方法,但似乎它可能是最好的。它似乎也是处理客户端用户友好性的一种越来越多的方式,而imho似乎是一个很好的习惯。
感谢您向我展示!
答案 0 :(得分:5)
是。如果使用POST数据加载页面,则会发生这种情况。为防止这种情况,您需要实施POST/REDIRECT/GET
pattern。
Post / Redirect / Get(PRG)是一种Web开发设计模式,可以防止一些重复的表单提交,为用户代理(用户)创建更直观的界面。 PRG以可预测的方式支持书签和刷新按钮,不会创建重复的表单提交。
答案 1 :(得分:2)
是。如果有人手动刷新浏览器,它会询问他们是否要再次发送表单数据。这将导致代码被执行。
答案 2 :(得分:0)
处理此问题的一种方法是使用令牌。
如果有人要刷新并重新发送帖子数据,那么您在帖子请求中的令牌将与您在第5步生成新令牌时单独存储的令牌不同