2012-03-22 33 views
0

我正在构建MVC应用程序,并希望将缓存放入我的应用程序中。我已经读过缓存,你只需要把[OutputCache(Duration = 60,VaryByParam =“none”)]以上的控制器方法,它会工作。但在我的情况下,我想缓存不是整个控制器的方法,但内部方法将从索引控制器调用,并将返回IEnumerable<SelectListItem>,并导致我想要缓存。MVC3中非视图方法的缓存问题

不过缓存仅用于控制器方法,这将导致景观效果的工作,我也搜索缓存非视图的方法和发现了一些MVCDonutCaching和阅读this articles并通过安装尝试,这也按照以下

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

     return region.GetRegionsList(); 
    } 

但不是运气来实现我的目标!有没有人在这里完成这种类型的缓存?那么请帮助我实现这个目标。

在此先感谢。

回答

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