尝试在部分视图上设置不同的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不会清除其缓存,直到父视图刷新其位置为止,我希望PartialView每5秒清除一次缓存(而不是每10秒清除一次父视图)确实)。在我看到的在PartialView上使用OutputCache的示例中,缓存是在PartialView而不是包含视图上实现的。有谁知道这是否是MVC3中缓存的限制,或者是否存在另一种方法来处理同一页面上的不同缓存机制?提前致谢!
最佳答案
您已将整个父视图缓存了10秒钟。这意味着在这10秒钟内,子动作将永远不会被击中,整个视图将从缓存中提供。即使子操作的缓存在5秒钟后过期,也不会被点击。
在ASP.NET MVC 3中,仅支持甜甜圈孔缓存(通过在子操作上使用OutputCache属性来缓存页面的一部分)。不支持甜甜圈缓存(从此缓存中排除部分缓存页面)。