Как заставить браузеры перезагружать кэшированные CSS-файлы при использовании тем Asp.Net?
Возможный дубликат:
CSS в папке App_Theme становится кэшированным в браузере
Я видел " Что такое элегантный способ заставить браузеры перезагружать кэшированные файлы CSS/JS?", Но в этом ответе используется PHP, и он не учитывает тот факт, что CSS вводится динамически темой ASP.Net.
4 ответа
Я думаю, что у меня есть быстрое и грязное решение. Хитрость заключается в том, чтобы проверить элементы управления в заголовке страницы (например, в PreRender
фаза), найдите ссылки, указывающие на CSS-файлы, в разделе App_Themes
папку и сделайте их динамическими (добавив некоторую случайную информацию в строку запроса). Это, скорее всего, скажет браузеру аннулировать кэшированную версию файла.
Код:
protected void Page_PreRender(object sender, EventArgs e)
{
HtmlLink link = null;
foreach (Control c in Header.Controls)
{
if (c is HtmlLink)
{
link = c as HtmlLink;
if (link.Href.IndexOf("App_Themes/", StringComparison.InvariantCultureIgnoreCase) >= 0 &&
link.Href.EndsWith(".css", StringComparison.InvariantCultureIgnoreCase))
{
link.Href += string.Format("?t={0}", DateTime.Now.Ticks.ToString());
}
}
}
}
Выход:
<link href="App_Themes/MyTheme/MyTheme.css?t=634310637798128189"
type="text/css" rel="stylesheet" />
Обратите внимание, что вам нужно иметь <head runat="server">
объявлен в разметке вашей страницы, чтобы иметь возможность доступа к Header
собственность (иначе это будет null
).
По окончании внесения изменений на сайт измените название css вручную.
Если вы спрашиваете, как сторона SERVER может принудительно перегрузить... Один из способов - динамически изменить имя файла CSS/JS, чтобы при последующих вызовах страницы требовался другой файл.
<sarcasm>
Другой способ - просто сказать пользователю нажать CTRL-F5:)</sarcasm>
Я не нашел способа версии файлов App_Themes (пока), но вы можете настроить их истечение в течение относительно короткого периода времени (например, 10 секунд), что минимизирует проблему с кешем, давая вам некоторое преимущество в производительности при кешировании., Помните, что если файл не изменился, сервер ответит 304-Не изменено, поэтому трафик уменьшается, даже если браузер запрашивает файл.
Добавьте это к <configuration>
раздел Web.Config
<location path="App_Themes">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:10" />
</staticContent>
</system.webServer>
</location>