首先先用代码来说话:
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中查询数据时不需要类型转换 |
有一些类型转换代码 | 可读性更好 |