9

我怎么能缓存整个页面,除了顶部的一点,它说明"Welcome back, Matt! | Log Out"了用户是否登录等等?

我正在使用 ASP.NET MVC 2。

4

5 回答 5

6

您要实现的目标称为甜甜圈缓存或缓存替换。从 ASP.NET MVC 2 开始,没有内置的帮助程序来支持这种情况。据我所知,这是 MVC v.1 中的一个计划功能,但在发布的过程中被删除了。有关更多信息,请查看此链接http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx,Donut Caching 是否与 ASP.NET MVC 一起正常工作?. Oleg 在这里提到的 VaryByParam 选项在您的情况下不是一个好主意。如果您有 VaryByParam,则将为每个不同的参数值(在您的情况下为每个用户名)将不同版本的页面放入缓存中。就个人而言,我会考虑缓存数据,而不是页面的整个输出。

于 2010-07-30T13:04:21.150 回答
3

可能有帮助

<%@ OutputCache Duration="15" VaryByParam="*" %>

或为VaryByParam. 请参阅http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspxhttp://blog.maartenballiauw.be/post/2008/06/Creating-an-ASPNET-MVC-OutputCache-ActionFilterAttribute.aspxhttp://blogs.microsoft.co.il/blogs/gilf/archive/2010/07/18/asp-net-output-cache-provider.aspx

此外,如果您的起始页不依赖于用户,则可以将起始页替换为带有空字段(隐藏 div)的非常静态的欢迎页面,而不是“欢迎回来,马特!| 注销”。之后,可以在客户端启动用于填充用户名的 ajax 请求。这种欢迎页面页面可以很好的缓存。

于 2010-07-29T17:29:28.367 回答
0

在这里,您有一个解决方法:

*将OutputCache属性添加到通常管理整个视图的Controller中:

[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
    }
    });

});

视图将从输出缓存中检索,一旦加载,将执行获取登录信息的请求。希望这将是一个非常快速的请求,并且用户不会注意到延迟。

于 2010-08-04T10:30:04.920 回答
0

通过 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 操作上配置缓存,但间隔更频繁或更不频繁,或者因其他参数而异。这允许您组合部分页面,并且为每个部分独立配置缓存刷新逻辑。

IMO 这个工具正是我想象的 MVC 中缓存应该实现的方式。

于 2012-08-23T20:18:15.423 回答