【问题标题】:Shared 'per request' storage for ASP.NET MVC controllersASP.NET MVC 控制器的共享“每个请求”存储
【发布时间】:2010-09-15 12:48:13
【问题描述】:

在一个标准的 ASP.NET webforms 项目中,如果我在一个页面上有几个用户控件需要相同的数据,我倾向于让第一个用户控件将数据放在 HttpContext.Current.Items 集合中,这样它其他所有人都可以使用。

对于在同一页面上多次使用的 MVC 控制器上的 ViewResult,与此最接近的等效项是什么?

谢谢

编辑:

基本上这里的 ViewReults 是在页面上出现多次的内容区域,所以我希望查询数据库一次以获取页面所有内容的集合(当第一个内容区域被加载时)而不是每个内容区域的单独查询。认为它会加快速度。

更多信息:

为了清楚起见,内容控制器操作在由附加“主”控制器提供服务的页面内重复用作“渲染操作”。因此,我认为我不能使用 ViewData(或控制器类本身的任何其他属性),因为它不在同一控制器的不同实例之间共享。

我想我将不得不依赖 HttpContext,毕竟使用this one 之类的方法。

【问题讨论】:

  • 详细说明一下 ViewResults 以及您正在使用它们做什么?
  • 补充信息,希望有意义..
  • 是什么样的数据?它依赖于用户吗?与安全相关吗?
  • @Malcolm - 很久以前,我完全不知道! :) 猜想我可能选择了 HttpContext 项目集合..

标签: asp.net-mvc asp.net-mvc-2 controller


【解决方案1】:

“在同一页面上多次”表示相同的请求意味着您仍然可以使用 HttpContext.Current.Items 集合。

【讨论】:

  • 猜对了,但我认为不建议直接从控制器访问 HttpContext,因为它会使单元测试更难?
  • 猜猜我走的是这条路,如果它再次出现,我现在会这样做
【解决方案2】:

为什么不直接将这些内容放入 ViewModel 并让所有控件都使用它?这是 View 模型的非常标准的用法。

【讨论】:

  • 是的,但是内容区域(由内容控制器提供服务)可以出现在网站上的任何位置,因此我必须将内容集合放在基本模型中,因为页面本身由数字提供服务不同的控制器,否则它们有不同的模型要求。
  • 这听起来像是 ViewData["SomeSharedKey"] 的合适用法。那么你就不需要基础视图模型了。
猜你喜欢
  • 2011-12-19
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
相关资源
最近更新 更多