Asp.net MVC中的ViewData与ViewBag的区别

在Asp.net MVC 3 web应用程序中,我们会用到ViewDataViewBag,对比一下:

ViewData ViewBag
它是Key/Value字典集合 它是dynamic类型对像
从Asp.net MVC 1 就有了 ASP.NET MVC3 才有
基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework
ViewData比ViewBag快 ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换
有一些类型转换代码 可读性更好

 

 

 

 

 

 

 

ViewBag属性:

public dynamic ViewBag {

    get {

        if (_dynamicViewData == null) {

            _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);

        }

        return _dynamicViewData;

    }

}

ViewData属性:

public ViewDataDictionary ViewData {

    get {

        if (_viewData == null) {

            SetViewData(new ViewDataDictionary());

        }

        return _viewData;

    }

    set {

        SetViewData(value);

    }

}

 

具体实例如下:

在Controller中使用ViewData:

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();
}

ViewData对应的index.cshtml页面:

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

 

在Controller中使用ViewBug:

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(); 

} 

ViewBug对应的index.cshtml页面:

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

 

 

 

你可能感兴趣的:(asp.net)