ASP.NET MVC中viewData、viewBag和templateData的区别

MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewDataMVC3中保留了ViewData的使用。ViewBag是动态类型(dynamic),ViewData是一个字典型的(Dictionary)。viewData比viewBag要快,且在viewPage中查询数据是需要转换数据类型,而viewBag不需要数据转换。TempData也可以用来向视图传递数据。只是ViewData和ViewBag的生命周期和View相同,只对当前View有用。而TempData则可以在不同的Action中进行传值,类似webform里的Seesion。

1、viewData。

Controller中使用ViewData:

 

[csharp]  view plain  copy
 
  1. <span style="white-space:pre">    </span>    ViewData["Title"] = " Using ViewData";  
  2.   
  3.             List<string> modules = new List<string>();  
  4.             modules.Add("Admin module");  
  5.             modules.Add("ShoppingCart module");  
  6.             modules.Add("CMS module");  
  7.             ViewData["modules"] = modules;  
  8.             return View();  

 

对应UsingViewData View的cshtml:

 

[html]  view plain  copy
 
  1. <h1>@ViewData["Title"]</h1>  
  2.  <div>   
  3.      Project Details:<br />  
  4.      <div>  
  5.        module List  :  
  6.        <ul id="modulelist">  
  7.           @foreach ( var module in ViewData["modules"] as List<string> )  
  8.           {            
  9.             <li>  
  10.                 @module  
  11.             </li>  
  12.           }  
  13.         </ul>          
  14.      </div>  
  15.  </div>  

大家注意到,这里需要类型转换——as List<string>.

 

 

2、viewBag。

 

Controller中使用viewBag:

 

[csharp]  view plain  copy
 
  1. <span style="white-space:pre">    </span>    ViewBag.Title = " Using ViewBag";  
  2.              
  3.             List<string> modules = new List<string>();  
  4.             modules.Add("Admin module");  
  5.             modules.Add("ShoppingCart module");  
  6.             modules.Add("CMS module");  
  7.             ViewBag.modules = modules;  
  8.             return View();             

 

对应View UsingViewBag 的cshtml的ViewBag:

 

[html]  view plain  copy
 
  1. <h1>@ViewBag.Title</h1>  
  2.  <div>  
  3.      Project Details:<br />  
  4.      <div>  
  5.        module List  :  
  6.        <ul id="modulelist">  
  7.       @foreach ( var module in ViewBag.modules )  
  8.       {            
  9.         <li>  
  10.             @module  
  11.         </li>  
  12.       }  
  13.      </ul>  
  14.    </div>  
  15.  </div>  

 

 

3、TempData。

Controller中使用TempData:

 

[csharp]  view plain  copy
 
  1. <span style="white-space:pre">    </span>TempData["abc"] = "this is tempdata";  
  2.         return View();  

 

对于视图里使用TempData:

 

[html]  view plain  copy
 
  1. @TempData["abc"]  

 

这里你会发现,TempData的值在取了一次后则会自动删除,这时我再刷新页面,则TempData["abc"]为Null了。

 

总结:ViewBag其实本质就是ViewData,只是多了层Dynamic控制,不过ViewData需要进行类型转换。TempData和ViewBag、ViewData的区别是生命周期不同,ViewData、ViewBag的生命周期和view同,TempData则可以在不同的Action中进行传值,但他调用一次的值就会被删除。

你可能感兴趣的:(ASP.NET MVC中viewData、viewBag和templateData的区别)