你是不是非常的討厭,當發布一些新的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://zhuqil.cnblogs.com