在MVC 3中的有一个新的ViewBag 动态特性,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。
为了看这些的不同(和不用viewbag的时候),我们来看看一下的实例:
Eample:--using ViewBag
Controller
- 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();
- }
View (ASPX View Engine)
- p>
- 02 My name is
- 03 <b><%: ViewData["name"] %></b>,
- 04 <b><%: ViewData["age"] %></b> years old.
- 05 <br />
- 06 I like the following colors:
- 07 </p>
- 08 <ul id="colors">
- 09 <% foreach (var color in ViewData["listColors"] as List<string>){ %>
- 10 <li>
- 11 <font color="<%: color %>"><%: color %></font>
- 12 </li>
- 13 <% } %>
- 14 </ul>
- 15 <p>
- 16 <%: ViewData["dateNow"] %>
- 17 </p>
Eample :-Using ViewBag
Controller
- public ActionResult Index()
- 02 {
- 03 List<string> colors = new List<string>();
- 04 colors.Add("red");
- 05 colors.Add("green");
- 06 colors.Add("blue");
- 07
- 08 ViewBag.ListColors = colors; //colors is List
- 09 ViewBag.DateNow = DateTime.Now;
- 10 ViewBag.Name = "Hajan";
- 11 ViewBag.Age = 25;
- 12 return View();
- 13 }
你和上面的对比 你看见了不同吗?
View (ASPX View Engine)
- <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是动态类型的,所以我没有必要把 ViewBag.ListColors 转换成如 List<string>这样子的形式。另一方面,这个ViewData["key"]是一个对方。
如果你在你的Controller中使用ViewData["ListColors"]=Colors,那么你可以在View试图中通过ViewBag.ListColors来检索它们。