VIEWDATA和VIEWBAG存储在MVC中的哪个位置?

时间:2014-08-06 10:20:34

标签: asp.net-mvc

我对MVC非常新...在ASP .Net中有状态管理技术,其中viewstate或cookie存储在客户端和会话存储在服务器中。类似地,我们在MVC中有Viewbag,ViewData和TempData(cookie和会话也在那里)。我知道来自控制器ViewData的语法存储为

  

ViewData [" Foo"] =" bar";

     

ViewBag.Foo =" bar&#34 ;;

并在相应的视图中将其作为

获取
  

ViewData [" Foo"] =" bar";

     

@ ViewBag.Foo

我想知道的是ViewData和ViewBag存储在哪里(客户端或服务器或其他地方)? 如果这是一个无关紧要的问题,请原谅我,,,,,

2 个答案:

答案 0 :(得分:11)

ViewBagViewData是州管理的一部分。它们都是允许(主要)从Controller传递到View的数据。

这完全发生在服务器端,但数据“存储”在服务器上的想法是误导性的。这些是瞬态对象,仅在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是poor practice

答案 1 :(得分:1)

好吧,我没有确切的证据证明viewBagViewData是否存储在服务器/客户端上,但肯定会存储在服务器内存而不是客户端。

首先,你甚至没有在MSDN文档中看到人们谈论他们的存储的地方;与ViewState中的ASP.NET不同,MSDN文档清楚地表明它存储在客户端。

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

接着,如果ViewDataViewBag也有相同类型的机制,那么查看页面来源可能会突出显示但是它并没有显示任何这样的足迹。

存储 cookies 永远不是一个选项,因为您可能无法确定它是否在客户端启用。

此外,它真的需要存储在服务器/客户端吗?导致在浏览器中呈现视图后,ViewBagViewData会从内存中弹出。然后,我没有看到存储它们的任何理由,这与ViewState中的下一页请求不同。

经过一番研究后的想法。