代码改变世界

ASP.NET MVC3中的ViewBag动态性

2011-09-11 10:00  随风浪迹天涯  阅读(6023)  评论(4编辑  收藏  举报

这些天在学习MVC3 ,因为在和我的mentor在开发一个公司内部的项目,所以就开始学习MVC,前些天学习Razor引擎的时候,看到国外的一篇文章介绍ViewBag的,就拿过来,原文请点击这里:ViewBag dynamic in ASP.NET MVC3

在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>
     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>

 Eample :-Using ViewBag

Controller

public ActionResult Index()
 {
     List<string> colors = new List<string>();
     colors.Add("red");
     colors.Add("green");
     colors.Add("blue");
 
    ViewBag.ListColors = colors; //colors is List
     ViewBag.DateNow = DateTime.Now;
     ViewBag.Name = "Hajan";
     ViewBag.Age = 25;
     return View(); 
}

 你和上面的对比 你看见了不同吗?

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