由父视图覆盖的MVC3部分视图OutputCache

时间:2011-11-07 14:34:24

标签: asp.net-mvc-3 caching scalability data-caching

尝试在部分视图上设置不同的OutputCache属性时,我发现PartialView缓存正在使用父输出缓存持续时间。使用以下代码,我希望RenderPartial会导致OutputCache持续时间缩短,但我发现它与父视图相同(10秒)

public class HomeController : Controller
{
    [OutputCache(Duration=10, VaryByParam="none")]
    public ActionResult Index()
    {
        ViewBag.Message = "Time now: "+ DateTime.Now.ToString();

        return View();
    }

    [ChildActionOnly]
    [OutputCache(Duration=5, VaryByParam="none")]
    public PartialViewResult LogonPartial()
    {
        return PartialView("_LogOnPartial");
    }
}

这个简单的例子显示了部分视图中的DateTime.Now,我发现PartialView不会清除它的缓存,直到父视图刷新他的位置我希望Partial视图每5秒清除一次缓存(不是每10个父视图确实)。通过我在PartialView上使用OutputCache看到的示例,缓存是在PartialView上实现的,而不是包含视图。有谁知道这是否是MVC3中缓存的限制,或者是否有另一种方法可以在同一页面上处理不同的缓存机制?提前谢谢!

1 个答案:

答案 0 :(得分:3)

您已将整个父视图缓存了10秒钟。这意味着在这10秒钟内,子动作不会被击中,整个视图将从缓存中提供。即使子动作的缓存在5秒后过期,它仍然不会被击中。

在ASP.NET MVC 3中,仅支持环形洞缓存(通过在子操作上使用OutputCache属性来缓存页面的一部分)。不支持圆环缓存(从此缓存中排除缓存页面的部分)。