HOW TO:使用參數快取頁面的多個版本
更新:2007 年 11 月
您有時會想快取頁面,但頁面可能會根據查詢字串參數的值或回傳時與頁面一起傳送的值,產生不同的輸出。例如,如果您有一個會根據使用者所在州別來顯示商店位置的頁面,則此頁面有可能接受會針對各州而產生不同版本之頁面的「州別」查詢字串值。
您可以根據當做查詢字串值或表單張貼值傳送的參數,快取多個版本的頁面回應。
注意事項: |
---|
不論傳遞參數的順序為何,對於快取目的而言,ASP.NET 會將具有相同索引鍵/值組之查詢字串值或表單張貼值都視為相同的。不過,對於快取目的而言,參數名稱會區分大小寫,而且 ASP.NET 將會針對大寫和小寫的參數名稱和值,快取不同版本的頁面。 |
若要使用參數以宣告方式快取多個版本的頁面輸出
將 Duration 屬性 (Attribute) 的 @ OutputCache 指示詞包含在 ASP.NET Web 網頁中。Duration 屬性是必要的且必須設定為大於零的整數。
在 @ OutputCache 指示詞中,納入 VaryByParam 屬性,並將它的值設定為查詢字串或表單張貼參數的名稱,而頁面會根據查詢字串或表單張貼參數的名稱而有所不同。
下列程式碼範例會快取頁面 60 秒,並會指定不同版本的頁面輸出將根據 City 查詢字串值或表單張貼參數來快取。
<%@ OutputCache Duration="60" VaryByParam="City" %>
注意事項: 如果您想要輸出快取根據多個參數而改變,請包含以分號 (;) 分隔的參數名稱清單。若要根據所有的參數值來改變快取,請將 VaryByParam 屬性設定為星號 (*)。下列程式碼範例會顯示如何根據 City 和 ZipCode 參數來改變頁面輸出。
若要使用參數以程式設計方式快取多個版本的頁面輸出
在頁面的 Page_Load 事件中,呼叫 Response 物件之 Cache 屬性 (Property) 上的 SetCacheability 和 SetExpires 方法。
指定參數名稱做為 Response 物件之 VaryByParams 屬性的引數,並將屬性設定為 true。
下列程式碼範例會顯示當伺服器收到具有不同 Zip 參數值的要求時,如何快取多個版本的頁面。
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByParams["Zip"] = true;
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)) Response.Cache.SetCacheability(HttpCacheability.Public) Response.Cache.SetValidUntilExpires(True) Response.Cache.VaryByParams("Zip") = True
注意事項: 如果您想根據多個參數改變快取的內容,請設定 VaryByParams 屬性數次。如果您想要快取的內容根據所有標頭值而有所不同,請將 VaryByHeader 屬性設定為星號 (*)。下列程式碼範例會顯示如何根據 City 和 Zip 參數來改變頁面輸出。