如何在ASP.NET MVC中进行“甜甜圈缓存”以便适用于更多内容?

5

我看到的所有关于甜甜圈缓存的例子都像这样:

 <%= Html.Substitute( c => DateTime.Now.ToString() )%>

如果我只想要日期,那很好,但还有哪些选项?

我知道有一个委托'MvcSubstitutionCallback',它具有以下签名:

 public delegate string MvcSubstitutionCallback(HttpContextBase httpContext); 

但是RenderActionRenderPartial返回void,所以我不能仅仅从委托方法中返回它们。我该如何在更复杂的情况下有效地使用这个回调函数。

我已经查看了Phil Haacked的两篇文章herehere,但似乎都没有完全符合我的需求。


这方面有什么进展了吗?现在你有可用的 HTML Helper 吗? - Robert Claypool
你等了四个月,然后两个评论一下子出现了。我也很感兴趣,有什么发现会再回复的。猜测我们需要一个新的帮助类封装html.ViewContext.HttpContext.Response.WriteSubstitution。 - dove
@robert 一旦我在页面上添加了身份验证,问题就接踵而至,最终我基本上关闭了整个网站的缓存。不得不优先处理其他事情。我会等待更好的官方回应。 - Simon_Weaver
4个回答

3

幸运的是我最终没有做这件事 :-) - Simon_Weaver

3
"Donut Caching"是指使用Response.WriteSubstitution方法。如果你查看MVC源码,你会发现System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial方法是使用Response.Output的(HtmlHelper.cs的第277行 - 在“RenderPartialInternal”方法的最后一行)- 因此,你需要创建自己的HTML助手来处理更复杂的情况。

1

1
与此问题相关的文章的tl;dr版本是,在MVC 1.0之后,您无法使用WriteSubstition。 - Jon Adams

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接