【问题标题】:Disable Page Cache to force page load with browser back button禁用页面缓存以使用浏览器后退按钮强制页面加载
【发布时间】:2010-10-24 13:13:13
【问题描述】:

我有一个 asp.net 网站,它正在使用我无法从服务器重新加载的页面上的更新面板。我有这个用于母版页上的禁用页面缓存。

     Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1))
     Response.Cache.SetValidUntilExpires(False)
     Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches)
     Response.Cache.SetCacheability(HttpCacheability.NoCache)
     Response.Cache.SetNoStore()

当我单击浏览器返回按钮返回页面时,它说页面已过期。我网站上的其他页面工作并调用页面加载,我找到但无法使用的唯一解决方案是在更新面板中 wrp 整个页面,但我不能这样做,因为我在页面上有一个报告查看器不适用于ajax。如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

  • 来自浏览器的过期页面消息意味着已经发送了一些回发数据。有些浏览器会询问用户,如果他们想重新发送它,有些则不询问。

标签: vb.net browser caching http-headers


【解决方案1】:

这不是浏览器缓存问题;这是一个回发。您必须实现 Post/Redirect/Get 模式以避免“您要再次提交吗?/页面已过期”消息。

http://en.wikipedia.org/wiki/Post/Redirect/Get

这个东西的经典例子是网页有一个保存按钮,可以在数据库中插入一些东西。单击“保存”按钮 -> 发生回发 -> 代码在表中插入一行 -> 用户引用页面 (F5) -> 再次发生回发 -> 代码再次插入同一行。

为避免前面示例中的双重插入,您需要在按下“保存”按钮时重定向,然后才执行插入。

【讨论】:

    【解决方案2】:

    只需将其添加到您的视图文件的标题部分:

    <head>
    <script language="JavaScript">
    <!--
    javascript:window.history.forward(1);
    //-->
    </script>
    </head>
    

    在body标签里面添加这个:

    <body onUnload="OperaReload()">
    <input type="hidden" id="refreshed" value="no">
    

    【讨论】:

      【解决方案3】:

      要使用 JavaScript 重新加载页面,请使用以下命令:

      window.location.replace(window.location.pathname);
      

      【讨论】:

        猜你喜欢
        • 2020-05-02
        • 2020-07-05
        • 2013-12-04
        • 2018-01-25
        • 1970-01-01
        • 2013-11-14
        • 2014-05-08
        • 1970-01-01
        相关资源
        最近更新 更多