代碼:/Files/zhuqil/CSSInclude.zip
你是不是非常的討厭,當發布一些新的css到你的網站的時候,用戶端的瀏覽器沒有下載到最新版本css,令網站看起來可怕?
本文通過一個簡單的控制項,迫使瀏覽器來檢索最新版本的CSS。
從使用的角度來看,我們只需要從工具箱拖放一個控制項,使用者可以在設計時或運行時設定具體的屬性。
以下是標記,能在您的ASP.NET Web表單或使用者控制項中使用到:
<CWeb:CSSInclude ID="CSSInclude1" runat="server" EnableViewState="false" HRef="~/css/base.css" Rel="stylesheet" Type="text/css" CacheKey="BaseCSS" />
控制項支援的屬性有:
HRef - 擷取或設定產生的link元素css檔案的href。
Rel - 擷取或設定所產生的link元素的rel。
Type-擷取或設定產生link元素的Type。
CacheKey -擷取或設定高速緩key的名稱,用於儲存緩衝CSS檔案的版本資訊。
控制項建立一個基於最後寫入該檔案時間的一個日期戳。這個日期戳然後儲存在緩衝中,對CSS檔案建立了緩衝依賴。當檔案改變,日期戳將發生變化,因此,用戶端將獲得最新的css樣式表。下面是用來擷取檔案的版本資訊的代碼:
代碼
/// <summary>
/// 擷取一個url以及它的版本,
/// 如果檔案已經改變,能讓瀏覽器在頁面重新整理的時候,能獲得的最新版本/// </summary>
/// <returns></returns>
private string GetIncludeUrlWithVersion()
{
string url = string.Empty;
string version = "1";
if (string.IsNullOrEmpty(CacheKey))
throw new ArgumentException("The cacheKey must have a value.");
if (Page.Cache[CacheKey] == null)
{
FileInfo fileInfo = new FileInfo(Page.Server.MapPath(HRef));
if (fileInfo.Exists)
{
version = fileInfo.LastWriteTime.ToString("ddMMyyyyhhmmss");
CacheDependency cacheDependency = new CacheDependency(fileInfo.FullName);
Page.Cache.Insert(CacheKey, version, cacheDependency,);
}
}
else
version = Page.Cache[CacheKey] as string;
return ResolveUrl(HRef) + "?v=" + version;
}
同樣的技術也可以用於指令碼中,迫使瀏覽器下載最新版本js檔案。通過設定用戶端瀏覽器,和IIS,或者通過添加自訂頭到response, 緩衝問題也能被防止。我在這裡所描述的技術只是用另一種實現方式得到相同的結果:)。
參考原文:http://www.codeproject.com/KB/aspnet/PreventStylesheetCaching.aspx