如何在IE中禁用Modal对话框上的缓存?

时间:2008-12-01 12:07:09

标签: html internet-explorer caching modal-dialog

我们使用IE方法将弹出窗口实现为模式对话框:

window.showModalDialog('...aspx')

弹出窗口的目标本身就是一个ASP.Net网页。

假设以下步骤从未启动过弹出窗口:

  1. 启动弹出窗口。
  2. Page_Load事件处理程序在服务器端执行。
  3. 关闭弹出窗口。
  4. 立即再次启动弹出窗口。
  5. 这次Page_Load事件处理程序不会执行。
  6. 很明显,弹出内容正在被缓存,因为如果在步骤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

    的地方

    有人可以帮忙吗?

9 个答案:

答案 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" %>