在MVC3中缓存非视图方法的问题

时间:2012-03-22 05:05:05

标签: asp.net-mvc-3 caching

我正在构建MVC应用程序,并希望将缓存放在我的应用程序中。我已经阅读了有关缓存的内容,您需要将 [OutputCache(Duration = 60,VaryByParam =“none”)] 置于控制器方法之上,它将起作用。但是在我的情况下,我想缓存不是整个控制器方法,而是内部方法,它将从索引控制器调用,并将返回IEnumerable<SelectListItem>和我希望缓存的结果。

但缓存仅适用于将导致视图结果的控制器方法,我还搜索了非视图方法的缓存,并找到了一些MVCDonutCaching并阅读this articles并通过安装尝试了这个也按照以下

   [DonutOutputCache(Duration=60, VaryByParam="none")]
    public IEnumerable<SelectListItem> GetRegionList()
    {
        Region region = new Region();

        return region.GetRegionsList();
    }

但是没有运气来实现我的目标!有谁在这里做过这种类型的缓存?那么请帮我实现这个目标。

先谢谢。

1 个答案:

答案 0 :(得分:1)

我相信你的问题不在于mvc本身,而在于缓存模型数据。缓存控制器操作就像形成静态页面并将其保存在IIS缓存中。每次用户请求“Home / Index”(例如)时,IIS都会从缓存中获取格式良好的页面(html)而不执行任何代码。

您要做的是缓存模型数据。这是完全不同的事情,因为它与IIS和html页面形成无关。您可以使用以下现有解决方案: Unity应用程序块 - http://msdn.microsoft.com/en-us/library/ff649102.aspx 或者来自stackexchange的这篇文章:https://softwareengineering.stackexchange.com/questions/35709/recommendations-for-a-net-distributed-caching-framework