Мы реализовали всплывающее окно как модальный диалог, используя метод IE:
window.showModalDialog('...aspx')
Целью всплывающего окна является веб-страница ASP.Net.
Предположим для следующих шагов, что всплывающее окно никогда не запускалось:
Понятно, что содержимое всплывающего окна кэшируется, потому что, если на шаге 4 мы очистим временные файлы Интернета, обработчик события Page_Load выполняется во второй раз.
Мы экспериментировали с добавлением следующего текста в заголовок веб-страницы (как рекомендовано несколькими другими источниками), но, похоже, ничего из этого не работает.
<meta http-equiv = "Cache-Control" content = "no-cache" />
<meta http-equiv = "Pragma" content = "no-cache" />
<meta http-equiv = "Expires" content = "-1" />
Мы также видели места, где они используются как обескураженный
Кто-нибудь может помочь?






Добавьте переменную строки запроса временной метки к URL-адресу содержимого диалогового окна - количество тиков с 01.01.08 или что-то в этом роде - IE будет рассматривать ее как новую страницу и игнорировать кеш.
Дополнительные пояснения или примеры должны быть добавлены, чтобы оправдать этот шаблон над настройками кэшируемости.
@CertifiedCrazy - не стесняйтесь добавлять их; Я уверен, что этот ответ 6-летней давности сейчас немного устарел.
Поместите Скрипач между IE и вашим сервером. Затем проверьте, содержит ли ответ на ваш запрос HTTP-заголовок Кэш-контроль. Указывается ли какое-либо значение, кроме без кеша? Если это так, то, возможно, IE предоставит этому заголовку приоритет над вашей директивой http-Equiv.
В противном случае вы должны попытаться заставить сервер отправлять HTTP-заголовок Cache-Control: без кеша. Если IE не уважает это, это ошибка IE. Опыт показывает, что выбрать другое решение менее болезненно, чем настаивать на исправлении ошибки, поэтому в этом случае я бы согласился на совет Грега.
Учитывая, что директивы http-Equiv не работают (и, возможно, не должны использоваться), и, несмотря на то, что, к сожалению, они относятся к категории решений для взлома, я думаю, нам придется пойти с этим (опубликовано Грегом). ..
url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&” + date.getTime(), ... );
Странно, что нет окончательного способа отключить кеширование в этих модальных диалогах. Я не уверен, считается ли использование модальных диалогов в веб-браузерах "хорошей идеей", но мы знаем по крайней мере о некоторых недостатках и альтернативах, но, к сожалению, не можем использовать их в этом проекте.
Спасибо за ваши предложения.
На самом деле это несколько хакерство, но я думаю, что корень проблемы - ошибка кеширования в IE (я сбился со счета, сколько раз IE что-то кешировал, когда я говорил этого не делать).
Одна из странных причуд IE заключается в том, что установка отсутствия кеширования в начале файла, похоже, не работает, но перемещение этого раздела после исходного 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>
Чтобы очистить кеш, добавьте это при загрузке страницы:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
вы забыли тег для повторной обработки страницы.
<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" />
Сначала я попробовал использовать следующий код.
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
тогда это работает ....
Спасибо...
Ответ Response.Cache.SetCacheability (HttpCacheability.NoCache); единственный, который корректно работает с IE9. Если вы установите метку времени в строке запроса, вам все равно придется обновить страницу, чтобы получить другой URL. Таким образом, модальный диалог по-прежнему кэшируется до обновления страницы, если вы не используете Response.Cache.SetCacheability (HttpCacheability.NoCache); Использование отметки времени в URL-адресе и Response.Cache.SetCacheability (HttpCacheability.NoCache); было бы лучше, покрыть все базы. В конце концов, мы имеем дело с IE.
Вы также можете попробовать следующий оператор в верхней части вызываемой страницы aspx:
<%@ OutputCache Location = "None" %>
Это даст вам несколько экземпляров страницы в кеше IE.