私は迅速かつ汚れた解決策があると思います。 (例えばPreRender
フェーズの)ページヘッダー内のコントロールを調べ、App_Themes
フォルダの下にあるCSSファイルを指すリンクを見つけて(クエリ文字列にランダムな情報を追加することによって)動的にします。これにより、キャッシュされたバージョンのファイルを無効にするようブラウザに指示する可能性が高くなります。
コード:
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());
}
}
}
}
出力:あなたはHeader
プロパティにアクセスできるようにするために、ページのマークアップで宣言さ<head runat="server">
を持っている必要があります
<link href="App_Themes/MyTheme/MyTheme.css?t=634310637798128189"
type="text/css" rel="stylesheet" />
注意(それ以外の場合null
)。
こんにちはホーマー、 の
<configuration>
セクションにこれを追加します。 ブラウザが推測すると、cssファイルがキャッシュされ、変更が反映されていれば新しいバージョンが取得されます。私の考えは、使用されておらず、テーマごとに異なるクラスをCSSファイルに持たせることです。このクラスが各cssファイルの先頭にある場合、ブラウザはそれを読み込み、別のクラス名を参照してcssファイルを再ダウンロードします。 これはもちろん、すべての前提に基づいており、インターネットエクスプローラキャッシュのCSSに関する知識はありません。 誰かがこれについて権威をもって話すことができるのであれば、私も興味があります! – WraithNath私はちょっと混乱しています - 別のテーマを使用すると、スタイルシートは別のフォルダ、つまり/App_Themes/blue/stylesheet.css対/App_Themes/red/stylesheet.cssにあります。そのディレクトリの変更は、キャッシュされないようにするのに十分です。さてもちろん、赤/スタイルシート。cssはまだキャッシュされますが、テーマを青色にスワップすると青色のテーマ(キャッシュされる可能性があります)がロードされます。 – Prescott
私はテーマを交換しているわけではなく、CSSファイルを変更しています。 – Homer