本文將示範如何實作在 ASP 中的片段快取。NET 中。快取片段快取不會實際限制網頁表單的程式碼片段直接 ;片段快取是指在 Web 表單內的個別使用者控制項 (.ascx) 的快取。每個使用者控制項可能擁有獨立的快取持續時間的如何套用快取行為的實作。在這份文件中的程式碼範例說明如何達成這項功能。
片段快取時要快取網頁的子集。導覽列、 頁首和頁尾是片段快取的理想對象。
需求
- Microsoft Windows 2000
- Microsoft 網際網路資訊伺服器 (IIS)
- 安裝。NET Framework
- ASP。NET
建立 ASP。NET Web 應用程式使用 C#。NET
下列的步驟將告訴您如何建立新的 ASP。NET Web 應用程式中,名為 FragmentCache。
- 請開啟 Microsoft Visual Studio。NET
- 在 [檔案] 功能表中,指向 [新增],然後按一下 [專案。
- 在 [新增專案] 對話方塊中,按一下 [專案類型] 下的 [ Visual C# 專案,然後按一下ASP。NET Web 應用程式在範本內。
- 在 [名稱] 方塊中,輸入 FragmentCache.在 [位置] 方塊中,選取適當的伺服器。如果您使用本機伺服器,您就可以將伺服器名稱為 http://localhost。
建立使用者控制項
本章節提供範例程式碼,您可以使用這份文件中的每個使用者控制項的說明。您可以複製並貼到相關聯的.ascx 檔案和程式碼後置網頁的範例程式碼,如所述。
1 (FragmentCtrl1.ascx) 的使用者控制項
下列的使用者控制項 FragmentCtrl1.ascx,並不困難。FragmentCtrl1.ascx 寫出時間項目的快取項目就會發生。就如同所有的本文中所建立的控制項,讓控制項更容易在 run time 區分設定和相關的行為,在稍後的章節中提供基本的說明。
- 在 Visual Studio。NET 中,建立新的使用者控制項,如下所示:
- 在 [方案總管專案節點上按一下滑鼠右鍵,指向 [新增],然後按一下 加入 Web 使用者控制項.
- 命名 FragmentCtrl1.ascx,該控制項,然後按一下 [開啟。
- 請確定已選取 [設計] 索引標籤。按一下和 Web Form標籤控制項從工具箱] 中的Web Form區段拖放到頁面的標籤控制項。
- 按一下標籤控制項。在 [屬性] 窗格的 Visual Studio。NET 整合式的開發環境 (IDE) 中,型別 CacheEntryTime 在 [識別碼] 屬性和留下空白的 [文字] 屬性。
- 切換至 [HTML] 檢視中,並將下列的@ OutputCache指示詞加入至頁面的頂端:
<%@ OutputCache Duration="40" VaryByParam="none"%>
- .Ascx 檔案中,按一下滑鼠右鍵,然後按一下 [檢視程式碼],以顯示程式碼後置網頁原始檔。
- 將下列程式碼加入至Page_Load事件,設定CacheEntryTime標籤的Text屬性:
private void Page_Load(object sender, System.EventArgs e)
{
CacheEntryTime.Text ="FragmentCtrl1: " + DateTime.Now.TimeOfDay.ToString();
}
2 (FragmentCtrl2.ascx) 的使用者控制項
雖然您可以使用不同的快取期間,以顯示數個使用者控制項可以在同一個頁面中擁有獨立的行為產生的第一個控制項的另一個版本,這個區段會使第二個控制項,也就是 FragmentCtrl2.ascx,更增添趣味。FragmentCtrl2.ascx 用來介紹的
VaryByControl屬性。
VaryByControl可讓不同的快取項目設成可根據指定的控制項的值上。這項功能會清楚得多執行階段以進行下一節。
- 在 Visual Studio。NET 中,建立新的使用者控制項,如下所示:
- 在 [方案總管專案節點上按一下滑鼠右鍵,指向 [新增],然後按一下 加入 Web 使用者控制項.
- 命名 FragmentCtrl2.ascx,該控制項,然後按一下 [開啟。
- 請確定已選取 [設計] 索引標籤。按一下並拖曳標籤的 Web Form 控制項從工具箱] 中的Web Form區段拖然後標籤控制項放在網頁。
- 按一下標籤控制項。在 [屬性] 窗格中,輸入 CacheEntryTime 在 [識別碼] 屬性和留下空白的 [文字] 屬性。
- 直接標籤控制項之後,將游標的位置,然後按下 ENTER,移至頁面中的下一行。
- 按一下並將RadioButtonList的 Web Form] 控制項從工具箱] 中的Web Form區段拖放到網頁。RadioButtonList控制項應該Label控制項後,單獨出現在行。
- 按一下 [ RadioButtonList ] 控制項。在 [屬性] 窗格中,輸入 MyRadioButtonList 在 [識別碼] 屬性中。
- 在 [屬性] 窗格中,找出MyRadioButtonList控制項的 [ Items ] 屬性,按一下集合,,然後按一下出現集合旁的省略號 (...) 按鈕。
- 在 [ ListItem 集合編輯器] 視窗中,將ListItem成員加入,如下所示:
- 在 [成員] 下按一下 [新增]。
- 在 [ ListItem屬性] 區段中,將文字和值設定為 [ ],然後選定設為 True。
- 在 [成員] 下按一下 [新增一次。
- 在 [ ListItem屬性] 區段中,將文字和值設定為 [否],選取設為False。
- 在 [成員] 下按一下 [新增一次。
- 在 [ ListItem屬性] 區段中,將文字和值設定為 [或許,並且設定選取設為 False。
- 按一下[確定]以返回 [設計] 檢視中的.ascx 檔。顯示RadioButtonList控制項內所包含的三個選項按鈕的明: [是]、 [否],以及可能。
- 直接在RadioButtonList控制項,並按下 ENTER,移至頁面中的下一行後的資料指標的位置。
- 按一下並拖曳網頁表單] 按鈕] 控制項從工具箱] 中的Web Form區段拖放到網頁。[ Button ] 控制項應該RadioButtonList控制項之後,單獨出現在行。
- 按一下 [按鈕] 控制項。在 [屬性] 窗格中,輸入 送出 在 [文字] 屬性中。
- 切換至 [HTML] 檢視中,並將下列的@ OutputCache指示詞加入至頁面的頂端:
<%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="MyRadioButtonList"%>
- .Ascx 檔案中,按一下滑鼠右鍵,然後按一下 [檢視程式碼],以顯示程式碼後置網頁原始檔。
- 將下列程式碼加入至Page_Load事件,設定CacheEntryTime標籤的Text屬性:
private void Page_Load(object sender, System.EventArgs e)
{
CacheEntryTime.Text = "FragmentCtrl2: " + DateTime.Now.TimeOfDay.ToString();
}
建立 Web 表單,以包含使用者控制項
您現在可以建立 Web 表單 (.aspx),以包含新開發的使用者控制項。若要建立 Web 表單,請依照下列步驟執行:
- 加入新的 Web Form,名為 FragmentCaching.aspx Visual Studio 中的專案。NET,如下所示:
- 在 [方案總管專案節點上按一下滑鼠右鍵,指向 [新增],然後按一下 新增 Web 表單.
- 命名 Web 表單 FragmentCaching.aspx 中,並再按一下 [開啟。
- 請確定已選取 [設計] 索引標籤。按一下並拖曳標籤的 Web Form 控制項從工具箱] 中的Web Form區段拖放到網頁。
- 按一下標籤控制項。在 [屬性] 窗格中,輸入 時間 在 [識別碼] 屬性和留下空白的 [文字] 屬性。
- 直接在標籤控制項,並按下 ENTER,移至頁面中的下一行後的資料指標的位置。
- FragmentCtrl1.ascx,拖放到 Web Form,使它本身放置標籤控制項的資料行之後。直接控制項之後,將游標的位置,然後按 ENTER 鍵移至網頁中的下一行。
- FragmentCtrl2.ascx,拖放到 Web Form,使它放置在 FragmentCtrl1.ascx 後的資料行本身。
- 在 [HTML] 檢視中,「 Web 表單看起來應該類似下列的程式碼:
<%@ Page language ="c#" Codebehind="FragmentCaching.aspx.cs"
AutoEventWireup="false" Inherits="FragmentCache.FragmentCaching" %>
<%@ Register TagPrefix="uc1" TagName="FragmentCtrl1" Src="FragmentCtrl1.ascx" %>
<%@ Register TagPrefix="uc1" TagName="FragmentCtrl2" Src="FragmentCtrl2.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript (ECMAScript)">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="FragmentCaching" method="post" runat="server">
<P>
WebForm Time:
<asp:Label id="Time" runat="server" ForeColor="Blue"></asp:Label>
</P>
<P>
<uc1:FragmentCtrl1 id="FragmentCtrl11" runat="server">
</uc1:FragmentCtrl1>
</P>
<P>
<uc1:FragmentCtrl2 id="FragmentCtrl21" runat="server">
</uc1:FragmentCtrl2>
</P>
</form>
</body>
</HTML>
附註: 請確定這些控制項置於裡面 - 以滑鼠右鍵按一下.aspx 檔案中,然後再按一下 [檢視程式碼],以顯示程式碼後置網頁原始檔。
- 將下列程式碼加入至Page_Load事件,設定時間標籤的Text屬性:
private void Page_Load(object sender, System.EventArgs e)
{
Time.Text = "WebFormTime: " + DateTime.Now.TimeOfDay.ToString();
}
- 從 [檔案] 功能表中,按一下 [全部儲存] 以儲存使用者控制項、 Web Form 和其他相關聯的專案檔案]。
- 從 [建置] 功能表中的 Visual Studio。NET 整合式的開發環境 (IDE) 中,按一下 [建置],以建置專案。
執行範例
本章節將示範如何檢視程式碼在執行階段為見證快取行為,並且簡略描述為何,程式碼執行的方式,它不會。
- 在 Visual Studio 中。NET IDE 方案總管] 中,FragmentCaching.aspx Web Form 中,以滑鼠右鍵按一下,然後按一下 [在瀏覽器中的檢視執行任何程式碼。
- 頁面會出現在瀏覽器之後,頁面] 上按一下滑鼠右鍵,然後按一下重新整理重新整理頁面。您也可以按 F5 鍵重新整理頁面,如果您在外部 Visual Studio 的瀏覽器中檢視頁面。NET IDE 中。
請注意 Web Form 上的時間已經更新,但仍顯示使用者控制項,其相關聯的快取項目已建立時的時間。 - 在第二個控制項中,按一下 [提交]。請注意控制項就會顯示更新的時間。這是為了回應使用者控制項參考RadioButtonList控制項的VaryByControl屬性設定。
- 按一下 [否],然後按一下 [送出。請注意,在使用者控制項的顯示更新的時間是一次。這是因為新的快取項目進行此 [否] 值設定為基礎的控制項。
重複此步驟,但或許] 選項。您會看到相同的行為。 - 按一下 [ ],然後按一下 [送出。重複這項作業與 [否],並有可能的選項。請注意,這些控制項的選取項目會快取,而且會顯示上次快取項目。如果您繼續按一下 [送出過去的@ OutputCache指示詞的時間] 設定,使用者控制項的時間會更新為RadioButtonList控制項的每個特定的值選取項目。
附註: 不是本文的目的,以涵蓋所有可能的設定和片段快取的案例。如需詳細資訊,請參閱
參考 這份文件的最後一節。
疑難排解
- 不要嘗試以程式設計方式操作輸出快取使用者控制項。這是因為之前快取項目,就會發生在第一次在執行時,才以動態方式建立控制項。輸出快取滿足所有其他要求,直到控制項逾時。
- 如果使用者控制項裝載的 Web Form 具有輸出快取期間比使用者控制項的持續時間還長,Web Form 的設定將會支配控制項的快取行為。
如需有關 ASP。NET 快取,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
307225?
(http://support.microsoft.com/kb/307225/EN-US/
)
資訊: ASP。NET 快取的概觀