3

当尝试在局部视图上设置不同的 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 中缓存的限制,或者是否有另一种方法可以在同一页面上处理不同的缓存机制?提前致谢!

4

1 回答 1

3

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

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

于 2011-11-07T15:23:07.433 回答