ViewData与ViewBag的区别与联系

ViewData详述 

 

  • ViewData是一个继承自ViewDataDictionary类的Dictionary对象。
  • ViewData用来从Controller向对应的View传递值。
  • ViewData的只在当前当前的请求中有效,生命周期和View相同,其值不能在多个请求 *享。
  • 在重定向(redirection)后,ViewData中存储的变量值将变为null。
  • 在取出ViewData中的变量值是,必须进行合适的类型转换(隐式或显式)和空值检查。 下面我们来看一个简单的例子,演示一下如何使用ViewData来从Controller向View传值。 

 

 

然后,我们从视图中取出这个变量,

 

 

执行后,你将会在浏览器中看到如下的结果

ViewData与ViewBag的区别与联系

可能你注意到了,我在从ViewData中取出变量Message时并没有对其进行类型转换,那时 因为我们存储的是一个简单类型的变量值。假如存储的是复杂对象,在取出是必须进行类型转换。 综上, ViewData更适合从Controller向View传递简单对象数据时使用

ViewBag详述 

 

  • ViewBag是一个动态类型变量(dynamic),这是C# 4.0引入的新特性,变量类型会在运 行时进行解析。
  • ViewBag基本上是ViewData的包装,也是用来从Controller向View来传递值的。
  • ViewBag也只在当前的请求中有效。
  • 在重定向(redirection)后,ViewBag中存储的变量值将变为null 因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。

同样,我们通过一个简单的例子来演示一下如何利用ViewBag从Controller向View传递数 据。

ViewData与ViewBag的区别与联系

然后,在视图中取出数据并显示,

ViewData与ViewBag的区别与联系

        

最后,执行程序,你将会在浏览器中看到如下结果,

ViewData与ViewBag的区别与联系