我在操作上使用OutputCache(Duration = 60)
,默认情况下我认为使用@Html.Action("ActionName", "ControllerName")
呈现的子操作不会被缓存,除非使用OutputCache注释?这适用于MVC 2但似乎没有使用MVC 3.如果这已经改变,我如何设置页面的一部分不缓存?
由于
答案 0 :(得分:0)
我不确定,但这看起来很相似,也许会有所帮助:
答案 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中的方法中,我试图使返回的值足够独特,以至于它永远不会在正在发生的缓存的一秒内找到它。不是防弹的,但应该适用于没有大量流量的网站。