在MVC 3中的有一個新的ViewBag 動態特性,它主要是為了從Controller到view進行傳值用的,類似有所使用的ViewData[] 字典類。對於ViewBag是如此的強大,意味著你能動態set/get 值,增加任何數量的的額外欄位而不需要強型別的檢測。
為了看這些的不同(和不用viewbag的時候),我們來看看一下的執行個體:
Eample:--using ViewBag
Controller
view plaincopy to clipboardprint?
- 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();
-
- }
public ActionResult Index() </p><p> { </p><p> List<string> colors = new List<string>(); </p><p> colors.Add("red"); </p><p> colors.Add("green"); </p><p> colors.Add("blue"); </p><p> ViewData["listColors"] = colors; </p><p> ViewData["dateNow"] = DateTime.Now; </p><p> ViewData["name"] = "Hajan"; </p><p> ViewData["age"] = 25; </p><p> return View(); </p><p> }<br />
View (ASPX View Engine)
view plaincopy to clipboardprint?
- 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>
p> </p><p>02 My name is </p><p>03 <b><%: ViewData["name"] %></b>, </p><p>04 <b><%: ViewData["age"] %></b> years old. </p><p>05 <br /> </p><p>06 I like the following colors: </p><p>07 </p> </p><p>08 <ul id="colors"> </p><p>09 <% foreach (var color in ViewData["listColors"] as List<string>){ %> </p><p>10 <li> </p><p>11 <font color="<%: color %>"><%: color %></font> </p><p>12 </li> </p><p>13 <% } %> </p><p>14 </ul> </p><p>15 <p> </p><p>16 <%: ViewData["dateNow"] %> </p><p>17 </p><br />
Eample :-Using ViewBag
Controller
view plaincopy to clipboardprint?
- 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 }
public ActionResult Index() </p><p>02 { </p><p>03 List<string> colors = new List<string>(); </p><p>04 colors.Add("red"); </p><p>05 colors.Add("green"); </p><p>06 colors.Add("blue"); </p><p>07 </p><p>08 ViewBag.ListColors = colors; //colors is List </p><p>09 ViewBag.DateNow = DateTime.Now; </p><p>10 ViewBag.Name = "Hajan"; </p><p>11 ViewBag.Age = 25; </p><p>12 return View(); </p><p>13 }<br />
你和上面的對比 你看見了不同嗎?
View (ASPX View Engine)
view plaincopy to clipboardprint?
- <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>
<p> </p><p> My name is </p><p> <b><%: ViewBag.Name %></b>, </p><p> <b><%: ViewBag.Age %></b> years old. </p><p> <br /> </p><p> I like the following colors: </p><p> </p> </p><p> <ul id="colors"> </p><p><% foreach (var color in ViewBag.ListColors) { %> </p><p> <li> </p><p> <font color="<%: color %>"><%: color %></font> </p><p> </li> </p><p> <% } %> </p><p></ul> </p><p> <p> </p><p> <%: ViewBag.DateNow %> </p><p> </p><br />
在上面的例子以內ViewBag是動態類型的,所以我沒有必要把 ViewBag.ListColors 轉換成如 List<string>這樣子的形式。另一方面,這個ViewData["key"]是一個對方。
如果你在你的Controller中使用ViewData["ListColors"]=Colors,那麼你可以在View試圖中通過ViewBag.ListColors來檢索它們。