Asp.net MVC中的ViewData与ViewBag(转)

简单对比:    

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中查询数据时不需要类型转换
有一些类型转换代码 可读性更好

在Controller中使用ViewData:
public ActionResult UsingViewData()
{
    ViewData["Title"] = " Using ViewData";
    ViewData["ProjectName"] = "My Test Project";
    ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";
    ViewData["StartDate"] = new DateTime(201111);
    ViewData["TotalPrice"] = 1000;
    ViewData["TotalDays"] = 100;
    
    Dictionary<stringstring> stackholder = new Dictionary<stringstring>();
    stackholder.Add("Client","Mr.  Client");
    stackholder.Add("Manager","Mr. Joy");
    stackholder.Add("Team Leader","Mr.Toy");
    stackholder.Add("Sr. developer""Mr.dojoy");
    stackholder.Add("developer""Mr. nodoy");
    ViewData["stackholder"] = stackholder;

    List<string> modules = new List<string>();
    modules.Add("Admin module");
    modules.Add("ShoppingCart module");
    modules.Add("CMS module");
    ViewData["modules"] = modules;
    return View();

 对应UsingViewData View的cshtml:

<h1>@ViewData["Title"]</h1>
 <div>
   <div>
    <h2>Project Name : @ViewData["ProjectName"]</h2>
   </div>
   <div>
     ProjectDescription :   
     <p>"@ViewData["ProjectDescription"]".</p>
   </div>
   <div>
      Stack Holder :
      <br />

      <ul id="stakholder">
      @foreach ( var stakerholder in ViewData["stackholder"as Dictionary<stringstring> )
      {          
        <li>
            @stakerholder.Key &nbsp; : @stakerholder.Value
        </li>
      }
     </ul>
   </div>
   <div>
     Project Details:<br />
     <div>
       module List  :
       <ul id="modulelist">
      @foreach ( var module in ViewData["modules"as List<string> )
      {          
        <li>
            @module
        </li>
      }
     </ul>
        
     </div>
     Project StartDate : @ViewData["StartDate"]  <br />
     Project TotalPrice: @ViewData["TotalPrice"] <br />
     Project TotaDays  : @ViewData["TotalDays"
   </div>
</div> 
然后是ViewBag:
public ActionResult UsingViewBag()
{
    ViewBag.Title = " Using ViewBag";
    ViewBag.ProjectName = "My Test Project";
    ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
    ViewBag.StartDate = new DateTime(201111);
    ViewBag.TotalPrice = 1000;
    ViewBag.TotalDays = 100;
    
    Dictionary<stringstring> stackholder = new Dictionary<stringstring>();
    stackholder.Add("Client""Mr.  Client");
    stackholder.Add("Manager""Mr. Joy");
    stackholder.Add("Team Leader""Mr.Toy");
    stackholder.Add("Sr. developer""Mr.dojoy");
    stackholder.Add("developer""Mr. nodoy");
    ViewBag.stackholder = stackholder;

    List<string> modules = new List<string>();
    modules.Add("Admin module");
    modules.Add("ShoppingCart module");
    modules.Add("CMS module");
    ViewBag.modules = modules;
    return View();
}
对应View UsingViewBag 的cshtml的ViewBag:
<h1>@ViewBag.Title</h1>

<div>
   <div>
    <h2>Project Name : @ViewBag.ProjectName</h2>
   </div>
   <div>
     ProjectDescription :   
     <p>"@ViewBag.ProjectDescription.</p>
   </div>
   <div>
      Stack Holder :
      <br />

      <ul id="stakholder">
      @foreach ( var stakerholder in ViewBag.stackholder )
      {          
        <li>
            @stakerholder.Key &nbsp; : @stakerholder.Value
        </li>
      }
     </ul>
   </div>
   <div>
     Project Details:<br />
     <div>
       module List  :
       <ul id="modulelist">
      @foreach (var module in ViewBag.modules )
      {          
        <li>
            @module
        </li>
      }
     </ul>
        
     </div>
     Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
     Project TotalPrice: @ViewBag.TotalPrice  ?  <br />
     Project TotaDays  : @ViewBag.TotalDays 
   </div>
 </div>

转自:http://www.cnblogs.com/Gnepner/archive/2012/05/05/2484545.html
原文地址:https://www.cnblogs.com/zhangpengshou/p/2816533.html