我正在使用ASP.NET MVC 2。
可能有所帮助
<%@ OutputCache Duration="15" VaryByParam="*" %>
或者使用其他的 VaryByParam
值。请参见 http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx、http://blog.maartenballiauw.be/post/2008/06/Creating-an-ASPNET-MVC-OutputCache-ActionFilterAttribute.aspx 和 http://blogs.microsoft.co.il/blogs/gilf/archive/2010/07/18/asp-net-output-cache-provider.aspx。
此外,如果您有一个不依赖于用户的起始页面,则可以将起始页面替换为一个非常静态的欢迎页面,并使用空字段(隐藏 div)代替“欢迎回来,Matt! | 登出”。之后,可以在客户端开始一个用于填充用户名的 ajax 请求。这种欢迎页面可以被很好地缓存。
OutputCache
页面指令,而应该使用操作过滤器。 :S - Robert Koritnik[OutputCache(Duration = 3600, VaryByParam = "*")]
public ActionResult Index(FormCollection formCollection)
{
//Controller code
}
*对于您不想进行缓存的部分,使用jquery + ajax请求(具有自己的控制器且没有OutputCache属性)进行加载:
<div id="loginContainer"></div>
$(document).ready(function() {
$.post('controller/action', postdata, function(data) {
if (data.success == true) {
//Populate the container with the obtained data
}
});
});
视图将从输出缓存中检索,并在加载完成后执行获取登录信息的请求。希望这是一个非常快速的请求,用户不会注意到延迟。
通过NuGet获取此内容: http://mvcdonutcaching.codeplex.com/
为LogOnPartial添加一个操作,这样您就可以将其从_Layout.cshtml中的Html.Partial更改为Html.Action
@Html.Action("_LogOnPartial","Account",true)
true
是一个排除参数,表示从缓存中排除此内容。即使所在页面已被缓存,该操作也将被调用。这是不被缓存的“甜甜圈”中的“洞口”。
在您想要缓存的页面上(例如About.cshtml),应用DonutOutputCache属性。这允许新框架在缓存页面时检查页面,并在您排除操作的位置添加标志。
好处是_LogOnPartial未被缓存,将为不同的用户刷新,而页面的其余部分被缓存且About()操作不会运行。您甚至可以使用DonutOutputCache属性配置您创建的_LogOnPartial操作的缓存,但更频繁或更少的间隔,或者根据其他参数变化。这允许您组合部分页面,并且每个部分的缓存刷新逻辑都是独立配置的。
我认为这个工具正是我想象中MVC中应该实现的缓存。