禁用页面缓存以强制使用浏览器返回按钮重新加载页面

14
我有一个使用update panel的asp.net网站,但无法从服务器重新加载该页面。我在主页上设置了禁用页面缓存来解决这个问题。

我有一个使用update panel的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()
当我点击浏览器的返回按钮返回到页面时,它会显示页面已过期。我的网站上的其他页面都可以正常工作并调用页面加载,但我找到的唯一解决方案是将整个页面包含在UpdatePanel中,但是我无法这样做,因为页面上有一个与Ajax不兼容的报表查看器。如果有人能帮忙,我将不胜感激。

1
浏览器中的过期页面消息意味着已发送了一些 postback 数据。有些浏览器会询问用户是否要重新发送,而有些则不会询问。 - jor
3个回答

1
这不是浏览器缓存问题,而是后续提交的问题。您需要实现Post/Redirect/Get模式,以避免出现“要重新提交吗?/页面已过期”的消息。

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

这个问题的经典例子是当网页有一个保存按钮用于将内容插入到数据库中。点击“保存”按钮 -> 发生回发 -> 代码在表格中插入一行 -> 用户刷新页面(F5) -> 再次发生回发 -> 代码再次插入相同的行。
为了避免在上述示例中出现重复插入,需要在按下“保存”按钮时进行重定向,然后执行插入操作。

0

只需在您的视图文件中的头部添加以下内容:

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

在 body 标签内添加以下内容:
<body onUnload="OperaReload()">
<input type="hidden" id="refreshed" value="no">

0

使用以下代码重新加载带有 JavaScript 的页面:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接