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>
效果图:
MVC ViewData和ViewBag
 
ViewBag、ViewData 和 TempData 的区别:
ViewData 和 TempData 都可以传递弱类型数据,区别如下:
ViewData 只在当前 Action 中有效,生命周期和 View 相同;
TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。
TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。
 

你可能感兴趣的:(view)