在asp.net MVC中缓存部分视图

时间:2009-06-04 14:09:19

标签: asp.net-mvc caching

我在网络应用上遇到以下情况:

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

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

更改部门时,我使用参数“DepartmentId”对控制器操作执行ajax调用。在控制分数上有一个[outputcache]属性,因此它返回的函数将被缓存为每个部门ID。

我的问题是页面的初始加载。 您是否可以在视图中调用控制权并利用缓存?

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

3 个答案:

答案 0 :(得分:4)

菲尔·哈克(Phil Haack)撰写了一篇关于类似主题Donut Hole Caching的短篇博文。它是一个很好的起点。

答案 1 :(得分:4)

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

根据我的经验,这也很适合ajax模式,因为你只能通过一种动作方法“获取”你的数据。

讨论了部分请求here和子控制器here

希望这有帮助。

答案 2 :(得分:0)

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

您也可以尝试

  • 在HttpContext.Cache中自己缓存部门ID并在两个操作中使用它们(可能这么快你不再需要OutputCache而且没有双缓存)
  • 或者如果部门/功能的数量不是那么大,您可以创建一个包含所有功能的json结构,将它们存储在视图中并且根本不使用ajax。