8

重複の可能性:
App_ThemeフォルダーのCSSがブラウザーにキャッシュされます

「ブラウザにキャッシュされたCSS/JSファイルをリロードさせるエレガントな方法は何ですか?」を見てきましたが、そこでの答えはPHPを使用しており、CSSがASP.Netテーマによって動的に挿入されるという事実に対処していません。

4

4 に答える 4

14

私は迅速で汚い解決策を持っていると思います。秘訣は、ページヘッダー内のコントロールを調べ(たとえば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">にアクセスできるようにするには、ページのマークアップで宣言する必要があることに注意してください(そうでない場合はそうなります)。Headernull

于 2011-01-19T19:05:26.323 に答える
1

サーバー側がどのように強制的にリロードできるかを尋ねている場合...1つの方法は、CSS / JSのファイル名を動的に変更して、ページへの後続の呼び出しで別のファイルが必要になるようにすることです。

<sarcasm> もう1つは、ユーザーにCTRL-F5を押すように指示するだけです:) </sarcasm>

于 2011-01-19T19:35:56.500 に答える
1

サイトへの変更が終了したら、cssの名前を手動で変更します。

于 2012-03-16T13:42:30.177 に答える
1

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>
于 2013-02-04T13:16:04.660 に答える