在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来检索它们。