【问题标题】:.NET MVC 3 OutputCache Html.Action().NET MVC 3 输出缓存 Html.Action()
【发布时间】:2014-01-14 08:30:08
【问题描述】:

我在一个动作上使用OutputCache(Duration = 60),默认情况下我认为用@Html.Action("ActionName", "ControllerName") 渲染的子动作不会被缓存,除非用OutputCache 注释?这适用于 MVC 2,但似乎不适用于 MVC 3。如果这种情况发生了变化,我将如何将页面的一部分设置为不缓存?

谢谢

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    我不确定,但这看起来很相似,也许会有所帮助:

    OutputCache and RenderAction Cache Whole Page

    【讨论】:

    • 不幸的是,该链接不适用于 MVC 3。我在从 MVC 2 转换为 3 的应用程序上遇到了同样的问题。还有其他人知道这可能是怎么回事吗?谢谢....
    • 我使用 MVC4 并继续解决这个问题。有什么解决办法吗?
    【解决方案2】:

    这个问题很无奈。似乎子动作的持续时间应该能够设置为 0,就像正常动作一样,但是因为它必须是大于 0 的正整数,所以如果您尝试将子操作的持续时间设置为 0。为了解决这个问题,我使用以下属性装饰子操作:

    [ChildActionOnly]
    [OutputCache( Duration = 1, VaryByCustom="Always")]
    

    然后我通过添加以下方法在 Global.asax.cs 中设置始终自定义输出缓存:

        public override string GetVaryByCustomString(HttpContext context, string arg)
        {
                if (arg == "Always")
                {
                        return DateTime.Now.Ticks.ToString();
                }
    
                return String.Empty;
        }
    

    基本上,第一个属性告诉 MVC 这是一个子操作(无法从应用程序外部访问)。第二个属性是将缓存保存 1 秒(子操作允许的最小值)并根据我的自定义始终缓存来改变缓存。在 global.asax.cs 中的方法中,我试图使返回的值足够独特,以至于它在缓存发生的一秒钟内永远找不到它。不是防弹的,但应该适用于没有大量流量的网站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2011-01-22
      相关资源
      最近更新 更多