【问题标题】:Outputcache attribute on clientside with partial pages'带有部分页面的客户端的 Outputcache 属性
【发布时间】:2011-06-20 11:26:25
【问题描述】:

我为应用程序创建菜单的部分页面。我正在使用渲染操作调用菜单部分视图。我想通过这样做将这个部分页面存储在客户端

[OutputCache(Duration=7200, Location  =OutputCacheLocation.Client, NoStore= true)]

但我收到以下错误

OutputCacheAttribute for child actions only supports Duration, VaryByCustom, and VaryByParam values. Please do not set CacheProfile, Location, NoStore, SqlDependency, VaryByContentEncoding, or VaryByHeader values for child actions

任何替代这个

【问题讨论】:

  • 从属性中移除NoStore

标签: c# asp.net-mvc asp.net-mvc-3 outputcache


【解决方案1】:

客户端缓存在 MVC 3 中不能用于部分。客户端浏览器只接收 HTML,“部分”只存在于服务器端。

为什么不使用服务器端缓存?

当您的菜单内容依赖于用户时,您可以将相关的用户信息添加到您的子操作的参数中。例如:

[OutputCache(Duration=7200, VaryByParam="*")]  
public PartialViewResult Menu(int userId)
{
   ...
}

【讨论】:

  • 这不会占用服务器太多内存吗?这将在 2 小时范围内产生与活动用户一样多的实例。不确定,但我想这会将实际的 html 存储在内存中,而不仅仅是一些变量,所以空间会更大。
  • 这不是一个实用的解决方案。您可能希望在每个页面的顶部显示欢迎消息以及用户名。即使您可以添加一个指定用户的参数,至少可以说将数千个用户的输出保存在内存中也不是明智之举。
猜你喜欢
  • 1970-01-01
  • 2013-08-21
  • 2013-01-13
  • 1970-01-01
  • 2016-10-25
  • 2018-05-25
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多