2011-12-06 20 views
3

私はASP.NETテーマを使用するサイトで作業しています。私が抱えている問題は、CSSファイルを更新したことですが、元のファイルはユーザーのブラウザによって保持されています。私はブラウザに最新のCSSファイルを取得させる方法があるのだろうかと思っています。私はCSSファイル、例えばにバージョン番号を追加することを示唆している同様の質問への他の回答を見てきましたASP.NETテーマを使用するときに強制的にCSSを更新する方法はありますか?

private void SetPageTheme() 
{ 
    Page.Theme = "ClientA_Theme"; 
} 

テーマは、のようなコードで設定されています/CssFile.css?v=1.2.3

ASP.NETテーマでこれを行う方法はありますか?

答えて

4

私にも同様の問題がありました。 CSSファイルにcontent-expiration headerを追加してキャッシュされないように設定するか、このSOの質問に記載されているソリューションを使用することができます。here

また、各ページにメソッドを追加することもできます例MyTheme1_1または類似のために - もう一つの技術は、テーマ名にバージョン番号を含めることであろう

protected override void OnPreRender(System.EventArgs e)  
{   
     foreach (Control link in Page.Header.Controls)   
     {      
      if (link is HtmlLink)    
      {     
       HtmlLink cssLink = link as HtmlLink; 
       //Check if CSS link 
       if (cssLink.Attributes["type"].Equals("text/css", StringComparison.CurrentCultureIgnoreCase))     
       {      
        if (cssLink.Attributes["href"].Equals(String.Format("~/App_Themes/{0}/{0}.css", Page.Theme), StringComparison.CurrentCultureIgnoreCase))      
        {  
         //perhaps add the version of your app here.                 
         cssLink.Attributes["href"] += "?v1.1";           
        }     
       }    
      }   
     } 
     base.OnPreRender(e);  
    } 

:あなたのpage.headerのコントロールは、(!おそらくあなたのMaster.Page内)のような何かをします。その後、各リリースでは、「新しい」URLからコンテンツがロードされるため、コンテンツは各ユーザーに対して再度要求される必要があります。明らかに、これはより多くの作業ですが、リリースごとに1回でなければならず、以下に述べるオーバーヘッドはありません。

+0

面白いですが、すべてのページでCPUのコストが高すぎます。 – Aristos

+0

@Aristos次に、私があなたのことを考えている唯一のことは、あなたのアプリのバージョン番号をテーマ名に入れていることです。少なくとも各リリースでは各テーマの特有のバージョンが使用されます。つまり、そのコンテンツに対して新しいリクエストが発行されます。 – dash

+0

私は、すべてのcssを読み込み、それらを最小化し、ファイル上のバージョンを追加し、(データベース上で)すべての更新で一度だけキャッシュする複雑なクラスを使用して、既存のファイルを読み込みます。 asp.net 4.5にも同様のinbuild機能があります。 – Aristos

関連する問題