談了如何快取頁面面的全部輸出,在我們只需要快取頁面面的一部分內容時,而另外一部分內容需要動態更新時,這個時候我們可以用部分頁面緩衝技術。
啟用部分頁面緩衝的方法主要有兩種:
(1) 緩衝後替換技術(post-cache substitution)
(2) 使用使用者控制項來快取頁面面中一個特定地區,而不是整個頁面。
可以以聲明方式或者編程的方式來使用緩衝後替換技術(這個名字取得不咋樣)。如果希望以聲明方式來使用緩衝後替換,則要使用ASP.NET的Substitution控制項。
Code
<%@ Page Language="C#" %>
<%@ OutputCache Duration="15" VaryByParam="none" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public static string GetTime(HttpContext context)
{
return DateTime.Now.ToString("T");
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Substitution Control</title>
</head>
<body>
<form id="form1" runat="server">
<div>
The cached time is: <%= DateTime.Now.ToString("T") %>
<hr />
The substitution time is:
<asp:Substitution
id="Substitution1"
MethodName="GetTime"
Runat="server" />
</div>
</form>
</body>
</html>
Substitution控制項有一個重要的屬性:MethodName。MethodName屬性接受頁面上定義的一個方法的名稱,該方法必須是靜態,因為當網頁輸出快取時,頁面執行個體還沒有被建立。
可以像ASP.NET 頁面一樣在記憶體中緩衝使用者控制項呈現的內容。當給使用者控制項添加%@OutputCache%指令時,使用者控制項的輸出內容就被緩衝了。
Code
<%@ Control Language="C#" ClassName="Movies" %>
<%@ OutputCache Duration="600" VaryByParam="none" %>
User Control Time:
<%= DateTime.Now.ToString("T") %>
<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
Runat="server" />
<asp:SqlDataSource
id="srcMovies"
ConnectionString="<%$ ConnectionStrings:Movies %>"
SelectCommand="SELECT Title,Director FROM Movies"
Runat="server" />