我们使用IE方法将弹出窗口实现为模式对话框:
window.showModalDialog('...aspx')
弹出窗口的目标本身就是一个ASP.Net网页。
假设以下步骤从未启动过弹出窗口:
很明显,弹出内容正在被缓存,因为如果在步骤4中我们清除临时Internet文件,则第二次执行Page_Load事件处理程序。
我们已尝试将以下内容添加到网页主管(正如其他几个来源所推荐的那样),但似乎没有任何效果。
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
我们还看到过使用这些地方discouraged
的地方有人可以帮忙吗?
答案 0 :(得分:9)
将时间戳查询字符串变量添加到对话框内容的URL中 - 自1/1/08以来的刻度数或其他内容 - IE将其视为新页面并忽略缓存。
答案 1 :(得分:8)
要清除缓存,请在页面加载中添加:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
答案 2 :(得分:4)
鉴于http-equiv指令不起作用(并且可以说不应该使用),尽管不幸的是它属于黑客类别的解决方案,但我认为我们将不得不采用这种方式(发布者)格雷格)...
url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&” + date.getTime(), ... );
奇怪的是,没有明确的方法来禁用这些模态对话框上的缓存。我不确定在网络浏览器中使用模态对话框是否被认为是一个“好主意”,但我们至少知道一些缺点和替代方案,但遗憾的是无法在这个项目中使用它们。 / p>
感谢您的建议。
答案 3 :(得分:2)
将Fiddler放在IE和服务器之间。然后检查对您的请求的响应是否带有HTTP标头 Cache-Control 。除了 no-cache 之外,还有其他值吗?如果是这样,那么IE可能会优先于 http-equiv 指令。
如果没有,您应该尝试让服务器发送HTTP标头 Cache-Control:no-cache 。如果IE不尊重这个,那就是IE中的一个错误。经验表明,选择不同的解决方案比按错误修复更少痛苦,所以在这种情况下我同意Greg的提示。
答案 4 :(得分:2)
首先我尝试使用以下代码。
meta http-equiv="Cache-Control" content="no-cache"
meta http-equiv="Pragma" content="no-cache"
meta http-equiv="Expires" content="-1"
但之后没有给出任何解决方案,我尝试使用带有时间戳变量的Query String, 喜欢
vat time = new Date().getTime();
url?queryString&time=time
然后它起作用....
...谢谢
答案 5 :(得分:1)
您忘记了重新处理页面的标记。
<base target="_top" />
如果你把标签放在下面,那么将清理缓存:
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<base target="_top" />
答案 6 :(得分:0)
IE的一个奇怪的怪癖是在文件开头设置no-cache似乎不起作用,但是将该部分移动到原始HTML之后常常会这样做。最好将其作为HTTP标头发送,但以下内容适用于大多数情况:
<html>
<head><title>Blah</title></head>
<body>Contents</body>
</html>
<html>
<head>
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
</head>
</html>
答案 7 :(得分:0)
答案Response.Cache.SetCacheability(HttpCacheability.NoCache);是唯一一个与IE9一起正常工作的。如果在查询字符串中设置时间戳,则仍需刷新页面以获取不同的URL。因此,除非您使用Response.Cache.SetCacheability(HttpCacheability.NoCache),否则模式对话框仍会被缓存,直到页面刷新为止。 在URL和Response.Cache.SetCacheability(HttpCacheability.NoCache)上使用时间戳;将是最好的,覆盖所有的基础。毕竟我们正在处理的是IE。
答案 8 :(得分:0)
您还可以在被调用的aspx页面顶部尝试以下语句:
<%@ OutputCache Location="None" %>