9

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

window.showModalDialog('...aspx')

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

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

  1. 启动弹出窗口。
  2. Page_Load 事件处理程序在服务器端执行。
  3. 关闭弹出窗口。
  4. 立即再次启动弹出窗口。
  5. 这次 Page_Load 事件处理程序不执行。

很明显,弹出内容正在被缓存,因为如果在第 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" />

我们还看到不鼓励使用这些的地方

任何人都可以帮忙吗?

4

9 回答 9

9

将时间戳查询字符串变量添加到对话框内容的 URL - 自 2008 年 1 月 1 日以来的滴答数或其他东西 - IE 会将其视为新页面并忽略缓存。

于 2008-12-01T12:17:48.347 回答
8

要清除缓存,请在页面加载中添加:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
于 2010-02-26T16:04:08.953 回答
4

鉴于 http-equiv 指令不起作用(并且可以说不应该使用),尽管不幸的是它属于 hack 解决方案类别,但我认为我们将不得不这样做(由 Greg 发布)。 ..

url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&amp;” + date.getTime(), ... );

奇怪的是,没有明确的方法来禁用这些模式对话框上的缓存。我不确定在网络浏览器中使用模式对话框是否被接受为“好主意”,但我们至少知道一些缺点和替代方案,但不幸的是无法在这个项目中使用它们。

感谢您的建议。

于 2008-12-02T09:26:28.600 回答
2

Fiddler放在 IE 和您的服务器之间。然后检查对您的请求的响应是否带有 HTTP 标头Cache-Control除了no-cache之外,还有其他一些值吗?如果是这样,那么 IE 可能会将此标头优先于您的http-equiv指令。

如果没有,您应该尝试让服务器发送 HTTP 标头Cache-Control:no-cache。如果 IE 不尊重这一点,那就是 IE 中的一个错误。经验表明,选择不同的解决方案比要求修正错误更容易,所以在这种情况下,我同意 Greg 的建议。

于 2008-12-01T13:53:01.633 回答
2

首先,我尝试使用以下代码。

meta http-equiv="Cache-Control" content="no-cache" 
meta http-equiv="Pragma" content="no-cache" 
meta http-equiv="Expires" content="-1" 

但之后没有给出任何解决方案,我尝试使用带有时间戳变量的查询字符串,比如

vat time = new Date().getTime();

url?queryString&time=time

然后它工作....

谢谢...

于 2011-10-04T16:41:01.377 回答
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" />
于 2011-02-02T10:32:41.723 回答
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>
于 2009-01-07T16:46:27.380 回答
0

答案 Response.Cache.SetCacheability(HttpCacheability.NoCache); 是唯一能与 IE9 一起正常工作的。如果您在查询字符串中设置了时间戳,您仍然需要刷新页面以获取不同的 URL。因此,除非您使用 Response.Cache.SetCacheability(HttpCacheability.NoCache); 在 URL 和 Response.Cache.SetCacheability(HttpCacheability.NoCache) 上使用时间戳;最好,覆盖所有的基础。毕竟我们要处理的是IE。

于 2012-05-18T03:15:27.170 回答
0

您还可以在被调用的 aspx 页面顶部尝试以下语句:

<%@ OutputCache Location="None" %>
于 2012-08-09T03:54:22.383 回答