2011-12-06 50 views
3

我正在使用ASP.NET主題的網站上工作。我遇到的問題是我更新了CSS文件,但原始文件被用戶的瀏覽器保存。我想知道是否有辦法強制瀏覽器獲取最新的CSS文件。如何在使用ASP.NET主題時強制刷新CSS?

主題是通過類似的代碼設置:

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

我看到其他的答案類似的問題這表明,我追加一個版本號的CSS文件,例如/CssFile.css?v=1.2.3

有沒有辦法讓我這樣做ASP.NET主題?

回答

4

我有一個類似的問題;您可以設置IIS爲CSS文件添加content-expiration header,以便它們永遠不會被緩存,也可以使用此SO問題中提供的解決方案here

您還可以爲每個頁面添加一個方法以通過在page.header(!甚至在你Master.Page)的控制做這樣的事情:

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);  
    } 

另一種技術將包括主題名稱版本號 - 例如MyTheme1_1或相似。然後每個版本都會從「新」url加載內容,因此應該爲每個用戶再次請求內容。顯然,這是更多的工作,但應該是每個發佈一次,並沒有你在下面提到的開銷。

+0

有趣,但每一頁的CPU成本太高,每次都是永遠,只是爲了一次更新。 – Aristos

+0

@Aristos然後我唯一能想到的就是將主題名稱中的應用版本號。至少每個版本都會使用每個主題的獨特版本,這意味着將爲該內容發佈新的請求。 – dash

+0

我使用一個讀取所有css的複雜類,最小化它們,在文件上添加版本,並在每次更新中緩存一次(在數據庫上)一次,然後只讀取現有的現有文件。 asp.net 4.5有一個類似的inbuild函數。 – Aristos