.NET MVC 3 OutputCache Html.Action()

时间:2011-04-11 19:03:39

标签: asp.net-mvc-3

我在操作上使用OutputCache(Duration = 60),默认情况下我认为使用@Html.Action("ActionName", "ControllerName")呈现的子操作不会被缓存,除非使用OutputCache注释?这适用于MVC 2但似乎没有使用MVC 3.如果这已经改变,我如何设置页面的一部分不缓存?

由于

2 个答案:

答案 0 :(得分:0)

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

OutputCache and RenderAction Cache Whole Page

答案 1 :(得分:0)

这个问题非常令人沮丧。对于子操作,似乎应该能够将持续时间设置为0,因为正常操作可以,但是因为它必须是大于0的正整数,所以如果您尝试使用“持续时间必须为正数”错误为子操作设置持续时间为0。为了解决这个问题,我使用以下属性来装饰子操作:

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

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

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

            return String.Empty;
    }

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