MVC ViewData和ViewBag(转载)
视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。如:
Controller
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 ViewData["listColors"] 11 = colors; 12 ViewData["dateNow"] 13 = DateTime.Now; 14 ViewData["name"] 15 = "Hajan"; 16 ViewData["age"] 17 = 25; 18 return 19 View(); 20 }
Controller
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>
效果图:
ViewBag、ViewData 和 TempData 的区别:
ViewData 和 TempData 都可以传递弱类型数据,区别如下:
ViewData 只在当前 Action 中有效,生命周期和 View 相同;
TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。
TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。