當前位置:編程學習大全網 - 源碼下載 - 在頁面上進行緩存後又要保證局部的數據不緩存,如何實現

在頁面上進行緩存後又要保證局部的數據不緩存,如何實現

頁面部分緩存是指輸出緩存頁面的某些部分,而不是緩存整個頁面內容。實現頁面部分緩存有兩種機制:壹種是將頁面中需要緩存的部分置於用戶控件(.ascx文件)中,並且為用戶控件設置緩存功能(包含用戶控件的ASP.NET頁面可設置也可不設置緩存)。這就是通常所說的“控件緩存”。設置控件緩存的實質是對用戶控件進行緩存配置。主要包括以下3種方法:壹是使用@ OutputCache指令以聲明方式為用戶控件設置緩存功能,二是在代碼隱藏文件中使用PartialCachingAttribute類設置用戶控件緩存;三是使用ControlCachePolicy類以編程方式指定用戶控件緩存設置。另外,還有壹種稱為“緩存後替換”的方法。該方法與控件緩存正好相反,將頁面中的某壹部分設置為不緩存,因此,盡管緩存了整個頁面,但是當再次請求該頁時,將重新處理那些沒有設置為緩存的內容。

使用@ OutputCache指令

控件緩存與頁面輸出緩存的@ OutputCache指令既有相似之處,又有不同的方面。二者的***同點在於它們的設置方法基本相同,都是文件頂部設置包含屬性的@ OutputCache指令字符串。不同點包括以下兩個方面:壹是控件緩存的@ OutputCache指令設置在用戶控件文件中,而頁面輸出緩存的@ OutputCache設置在普通ASP.NET文件中。二是控件緩存的@ OutputCache指令只能設置6個屬性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在頁面輸出緩存的@ OutputCache指令字符串中設置的屬性多達10個。以上是設置控件緩存時需要註意的問題。下面列舉了壹些利用@ OutputCache指令設置控件緩存的示例,其中重點說明了VaryByParam和VaryByControl等屬性應用。

用戶控件中的@ OutputCache指令設置源代碼

<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>

以上代碼設置用戶控件緩存有效期時間是120秒,並且允許使用CategoryID和SelectedID參數來改變緩存。通過VaryByParam屬性設置,在服務器緩存中可能存儲多個用戶控件的實例。例如,對於壹個包含用戶控件的頁面,可能存在如下的URL鏈接。

包含用戶控件的頁面的URL鏈接

http://localhost/mypage.aspx?categoryid=foo&selectedid=0

http://localhost/mypage.aspx?categoryid=foo&selectedid=1

當請求如上URL地址的頁面時,由於控件中@ OutputCache指令的設置,尤其是屬性VaryByParam的設置,那麽在服務器緩存中就會存儲兩個版本的用戶控件緩存實例。

控件緩存設置除了支持以上所述VaryByParam屬性外,還支持VaryByControl屬性。VaryByParam屬性基於使用POST或者GET方式發送的名稱/值對來改變緩存,而VaryByControl屬性通過用戶控件文件中包含的服務器控件來改變緩存。下面是VaryByControl屬性的應用示例代碼。

用戶控件中的@ OutputCache指令設置源代碼

<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>

以上代碼設置緩存有效期是120秒,並且頁面不隨任何GET或POST參數改變(即使不使用VaryByParam屬性,但是仍然需要在@ OutputControl指令中顯式聲明該屬性)。如果用戶控件中包含ID屬性為“Category”的服務器控件(例如下拉框控件),那麽緩存將根據該控件的變化來存儲用戶控件數據。

如果讀者已經掌握了頁面輸出緩存的@ OutputCache指令設置方法,那麽控件緩存的@ OutputCache指令也會迎刃而解,無非僅使用其中的6個屬性而已。然而,可能會產生疑問:如果ASP.NET頁面和其中包含的用戶控件都通過@ OutputCache指令設置了緩存,那麽緩存該如何運行呢?

遇到這個問題時,應掌握以下個基本原則:壹是ASP.NET允許在頁面和頁面的用戶控件中同時使用@ OutputCache指令設置緩存,並且允許設置不同的緩存過期時間值。二是如果頁面輸出緩存過期時間長於用戶控件輸出緩存過期時間,則頁面的輸出緩存持續時間優先。例如,如果頁面輸出緩存設置為100秒,而用戶控件的輸出緩存設置為50秒,則包括用戶控件在內的整個頁將在輸出緩存中存儲100秒,而與用戶控件較短的時間設置無關。三是如果頁面輸出緩存過期時間比用戶控件的輸出緩存過期時間短,則即使已為某個請求重新生成該頁面的其余部分,也將壹直緩存用戶控件直到其過期時間到期為止。例如,如果頁面輸出緩存設置為50秒,而用戶控件輸出緩存設置為100秒,則頁面其余部分每到期兩次,用戶控件才到期壹次。

  • 上一篇:js怎麽獲取父函數的event
  • 下一篇:10人左右團建小遊戲
  • copyright 2024編程學習大全網