View或Partial View可以确定它是否被缓存

时间:2011-05-13 02:36:24

标签: asp.net-mvc

我有一个动作有这些属性:

  [OutputCache(Location = System.Web.UI.OutputCacheLocation.Server, Duration = 300, VaryByParam = "*")]

和另一个

  [OutputCache(Location = System.Web.UI.OutputCacheLocation.None)]

他们都使用相同的视图。

在View中,甚至在Action Method中,如何确定缓存是什么?即它是否是缓存页面?我已经尝试过查看Response.Headers(只有“Server:Microsoft-IIS / 7.0)”和“Response.CacheControl”在两种情况下都是“私有”。

1 个答案:

答案 0 :(得分:0)

我没有在应用程序中使用它,但是为了查看是否可能,我已经完成了这个示例...使用Reflection和一个基本控制器,并从我的action方法调用Initialize(),以下代码从调用方法获取OutputCache属性。然后,View或Partial View可以从ViewBag获取缓存位置。

public class BaseController : Controller
{
    public void Initialize()
    {
        var stackTrace = new StackTrace();

        if (stackTrace.FrameCount >= 1)
        {
            var methodBase = stackTrace.GetFrame(1).GetMethod();

            var filters = (OutputCacheAttribute[])methodBase.GetCustomAttributes(typeof(OutputCacheAttribute), false);

            if (filters.Length > 0)
            {
                ViewBag.CacheLocation = filters[0].Location;
            }
        }
    }
}