2009-06-04 69 views
5

我有一个web应用以下情况:在asp.net MVC缓存部分景色

一表“员工”包含列“”和“功能”。两者都是下拉列表。

“功能”下拉列表选项取决于所选的“部门”。 (所以每个部门都有自己的功能列表)

更改部门时,我使用参数“DepartmentId”对控制器操作执行ajax调用。这是控制对象上的[outputcache]属性,所以它返回的函数可以缓存给每个部门ID。

我的问题是页面的初始加载。 你可以在视图中调用控制角色并利用缓存吗?

有人吗? 30个意见,没有答案..有关我的问题的任何评论?太明显了?太难?太奇怪了?谷歌的东西(虽然我没有找到解决方案)?

回答

4

Phil Haack在一篇名为Donut Hole Caching的类似主题上写了一篇短文。它是一个很好的起点。

+0

不知道了,如果这固定它,但我标记为答案无论如何.. – 2010-09-14 09:12:17

0

你的意思是说你想调用控制器动作,直接生成视图,而不是使用ajax生成函数?如果我理解正确,我不认为有可能获取输出缓存中的数据(但我可能是错的)。无论如何,如果你能得到它,你仍然需要再次解码数据。

你也可以尝试

  • 缓存的部门识别自己在HttpContext.Cache和行动都使用它们(也许这是如此之快,你不需要再的OutputCache并且没有双缓存)
  • 或者如果部门/功能的数量不是很大,您可以创建一个包含所有功能的json结构,将它们存储在视图中并且根本不使用ajax。
4

我会使用子控制器或更好的部分请求来做你在问什么。在典型的页面中,我倾向于不缓存整个页面,而是将区域分解为通过部分请求调用的不同操作方法。这样我可以在每个区域有不同的过期输出缓存。这是更多的页面生命周期,但是当它们被缓存时,它们确实不是对性能征税。如果开始执行某个特定区域,维护和优化也更容易。

根据我的经验,这与ajax模式非常吻合,因为您只需从一个操作方法中“获取”您的数据。

部分要求进行了讨论here和子控制器here

希望这有助于。