asp.net-mvc-3 - MVC3 部分 View OutputCache 被父 View 覆盖

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

当尝试在部分 View 上设置不同的 OutputCache 属性时,我发现 PartialView 缓存正在使用父级输出缓存持续时间。使用以下代码,我希望 RenderPartial 能够缩短 OutputCache 持续时间,但我发现它与父 View 相同(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");
    }
}

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

最佳答案

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

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

关于asp.net-mvc-3 - MVC3 部分 View OutputCache 被父 View 覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8037892/

相关文章:

c# - 什么时候需要处理数据库连接

asp.net-mvc - 在 ASP.NET MVC 5 中使用远程 Redis 配置 OutputCache

asp.net-mvc-3 - Razor 引用文档

C# HttpRequest - 访问 url 中的主题标签

html - 如何在 dragstart 之前缓存整个图层并将其还原回 dragend?

google-chrome - 为网站开发禁用 Chrome 缓存

php - 为数据库中的每个 ID 维护一个字符串队列

.NET 客户端并发性能

scalability - 构建 "realtime bidding"广告交易平台需要什么样的软件架构?

c# - MVC3 : Overriding the Model values in HTTPPost action method