上一篇我們將 Html.Cache 打造為極具實用性的 API,只需在視圖中標記即可快取:
<% Html.Cache("cache_key", DateTime.Now.AddSeconds(10), () => { %>
<% foreach (var article in Model.Articles) { %>
<p><%= article.Body %></p>
<% } %>
<% }); %>
標記內部支援完整的 Razor/ASPX 語法,包括迴圈、條件判斷、<%= %> 輸出以及 RenderPartial 等輔助方法。然而,這些功能有其前提條件——標準 ASP.NET MVC 的 RenderPartial 實作不符合頁面輸出原則,需搭配 MvcPatch 專案才能正常運作。
一般情況下,ASP.NET 頁面輸出是向封裝 Response.Output 的 HtmlTextWriter 寫入內容:

為了「捕獲」快取區塊的輸出,我們在 HtmlTextWriter 與 Response.Output 之間插入了 RecordWriter:

這層攔截機制讓我們能在快取未命中時記錄輸出內容,命中時直接回放,避免重複執行委托邏輯。深入理解這一流程,是掌握高效片段快取的關鍵。