首先先用代码来说话:

ViewData:

public 
ActionResult Index()
{
List<string>
 colors = new 
List<string>();
colors.Add("red");
colors.Add("green");
colors.Add("blue");
ViewData["listColors"]
 = colors;
ViewData["dateNow"]
 = DateTime.Now;
ViewData["name"]
 = "Hajan";
ViewData["age"]
 = 25;
return 
View();
}

ViewBag:

1 public 
 2 ActionResult Index()
 3 {
 4 List<string>
 5  colors = new 
 6 List<string>();
 7 colors.Add("red");
 8 colors.Add("green");
 9 colors.Add("blue");
10 ViewBag.ListColors = colors; //colors
11  is List
12 ViewBag.DateNow
13  = DateTime.Now;
14 ViewBag.Name
15  = "Hajan";
16 ViewBag.Age
17  = 25;
18 return 
19 View(); 
20 }

View 中对两者的使用:

1.使用ViewData
<p>
My name is <b>@ViewData["name"] </b>,
<b>@ViewData["age"] </b>years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewData["listColors"] as List<string>)
{
<li><font color="@color">@color </font></li>
}
</ul>
<p>
@ViewData["dateNow"]
</p>
2.使用ViewBag
<p>
My name is <b>@ViewBag.Name</b>, <b>@ViewBag.Age</b> years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewBag.ListColors)
{
<li><font color="@color">@color</font> </li>
}
</ul>
<p>
@ViewBag.DateNow
</p>

效果:

 

 

ViewData:生命周期和View相同,仅对当前View有效。

ViewBag:和ViewData生命周期相同,也是对但前View有效,不同的是ViewBag的类型不再是字典的键值对结构,而是dynamic动态类型,属于MVC3里面新增的部分.

 

ViewData ViewBag
它是Key/Value字典集合 它是dynamic类型对像
从Asp.net MVC 1 就有了 ASP.NET MVC3 才有
基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework
ViewData比ViewBag快 ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换
有一些类型转换代码 可读性更好