考虑一下情景:
我访问了使用ASP.NET构建的网站页面。该页面是一个包含ASP.NET服务器控件的简单aspx页面。
我点击了一个链接,该链接将我带到同一网站上的其他页面。
我点击了浏览器的 BACK 按钮。
问题:在页面生命周期方面会发生什么?是否会发生所有事件或浏览器只显示页面的缓存版本而不发出任何请求?
答案 0 :(得分:16)
我认为最好的答案是:这取决于浏览器,特别是在发布/回发后。
较旧的浏览器用于弹出确认对话框,以显示“页面包含将重新提交的POST数据”,您可以继续(重新提交)或取消。由于ASP.NET WebForms中发生的所有事情都是FORM
元素(ViewState,事件等)的一部分,这将导致整个生命周期重复。</ p>
当然,这对重复提交没有造成任何麻烦,因此许多网站不得不为dpe问题提供解决方法,而今天大多数浏览器只是从缓存中获取页面。
... 除非覆盖缓存控制标头并强制浏览器不将页面存储在缓存中。显然,在这种情况下,无法从缓存中检索它,因此通常最终会重新提交。但是,再次,它取决于浏览器 - 例如,某些浏览器不允许通过SSL重新提交,所以如果这是使用的协议,那么用户只会看到一条消息,说明该页面已过期/不能所示。
考虑一下,可能更好的答案是:作为网站设计师,当单击“后退”按钮时,您实际上无法依赖用户浏览器中的任何特定行为。如果重复提交可能会产生负面影响(例如两次收取信用卡费用),那么您需要采取适当措施来防止这种情况发生。无论如何,这是一种很好的做法,因为用户完全可以简单地双击“提交”按钮。
答案 1 :(得分:1)
Response.ExpiresAbsolute = DateTime.Parse("1/1/1980");
Response.AddHeader("cache-control", "no-store, must-revalidate, private");
Response.AddHeader("Pragma", "no-cache");
解决此类问题
答案 2 :(得分:0)
通常所有事件都应该发生,但是如果你有一个超级浏览器,那么它可能会显示一个缓存页面 您可以在页面加载中放置一个断点,看看它是否会发生
答案 3 :(得分:0)
该页面将从缓存中显示。