MVC 中 VIEWDATA 和 VIEWBAG 存储在哪里?

9
我对MVC非常陌生。在ASP .Net中,有一种状态管理技术,其中viewstate或cookies被存储在客户端,而session存储在服务器上。同样,在MVC中,我们有Viewbag、ViewData和TempData(也有cookies和sessions)。我知道语法,如从控制器存储视图数据:
ViewData["Foo"] = "bar"; ViewBag.Foo = "bar";
然后在相应的视图中提取它:
ViewData["Foo"] = "bar"; @ViewBag.Foo
我想知道的是ViewData和ViewBag存储在哪里(客户端还是服务器或其他地方)?如果这是一个无关紧要的问题,请原谅我。
2个回答

12

ViewBagViewData 是状态管理的一部分。它们都是对象,主要用于从控制器传递数据到视图。

这完全在服务器端完成,但认为数据“存储”在服务器上的想法是误导性的。这些都是瞬态对象,仅在 HTTP 请求的生命周期内存在。

ViewBag 和 ViewData 的使用场景是:

在特定位置(例如从控制器到视图或在视图之间)传输少量数据。 ViewData 和 ViewBag 对象在以下情况下工作得很好:

  • 将查找数据的下拉列表并入实体中
  • 像购物车这样的组件
  • 像用户个人资料小部件这样的小部件
  • 少量聚合数据

来自http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

要避免的一件事是过度使用 ViewBag / ViewData。在 MVC 应用程序中,应该将模型传递给视图。过度使用 ViewBag 和 ViewData 是不良做法


它们是在服务器上创建的吗?创建后它们去哪里呢?另外,如果它们在服务器上,我们不能在其中存储大量数据吗? - Manik
1
@AlexC,你的回答仍然不够清晰。在使用ViewBag时,数据存储在哪里? - kbvishnu
@VeeKayBee:如果这仍然相关,请参见此处:https://dev59.com/q3LYa4cB1Zd3GeqPb840 - Anytoe

1

我没有确凿的证据来证明viewBagViewData是存储在服务器端还是客户端,但它们肯定会被存储在服务器内存中而不是客户端。

首先,你不会在任何地方看到人们谈论它们的存储,甚至不在MSDN文档中;不像ASP.NET中的ViewState,MSDN文档清楚地说明它存储在客户端。

其次,由于ViewState存储在客户端;它使用隐藏字段(__VIEWSTATE)在客户端存储视图状态数据。

继续下去,如果ViewDataViewBag也有同样的机制,那么查看页面源代码就可以显示出来,但它并没有显示任何这样的痕迹。

存储在cookies中从来都不是一个选项,因为你永远无法确定客户端是否启用了它。

此外,它是否真的需要存储在服务器/客户端?因为无论是 ViewBag 还是 ViewData 一旦视图在浏览器中呈现,它们都会从内存中弹出。那么我不认为有必要像在ViewState中那样存储它们以供下一页请求使用。这只是经过一些研究后的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接