Welcome 微信登录

首页 / 网页编程 / ASP.NET / 适合ASP.NET MVC的视图片断缓存方式(下):页面输出原则

适合ASP.NET MVC的视图片断缓存方式(下):页面输出原则2011-10-04 博客园 赵劼上一篇文章里已经把Html.Cache打造成了非常具有可用性的API,需要缓存时我们只需在页面上做一个 标记即可:

<% Html.Cache("cache_key", DateTime.Now.AddSeconds(10), () => { % >

<% foreach (var article in Model.Articles) { %>
<p><%= article.Body %></p>
<% } %>

<% }); % >

标记内部的写法和普通视图的写法相同,您可以for/foreach/if,也可以<%= %>,或者使用 RenderPartial等其他辅助方法输出内容,都会被一并缓存下来。只可惜,上次文章末尾我提到有些效果 是有前提的。

这个前提就是:某些RenderPartial和其他一些辅助方法的实现需要进行修改。好吧,再说的直接一些 :如果您使用标准的ASP.NET MVC,就无法使用RenderPartial的功能。我认为造成这种问题的原因是 ASP.NET MVC框架在实现时没有遵守页面内容输出的准则。所以我建议您使用MvcPatch项目进行ASP.NET MVC开发。

不过现在,我们还是来讨论一下准则吧。下面有些内容涉及到ASP.NET WebForm页面的输出方式,如果 您遇到了不理解的地方,可以去看一下这篇文章,它是我为“页面片段缓存”原理介绍而写的“铺垫”。

在普通情况下,一个ASP.NET页面输出时是向一个封装了Response.Output的HtmlTextWriter中写入内 容的:

而我们的片段缓存实现为了“捕获”某个缓存块输出的内容,则在HtmlTextWriter与Response.Output 之间又插入了一个RecordWriter: