尝试在部分视图上设置不同的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中缓存的限制,或者是否有另一种方法可以在同一页面上处理不同的缓存机制?提前谢谢!
答案 0 :(得分:3)
您已将整个父视图缓存了10秒钟。这意味着在这10秒钟内,子动作不会被击中,整个视图将从缓存中提供。即使子动作的缓存在5秒后过期,它仍然不会被击中。
在ASP.NET MVC 3中,仅支持环形洞缓存(通过在子操作上使用OutputCache属性来缓存页面的一部分)。不支持圆环缓存(从此缓存中排除缓存页面的部分)。