zoukankan      html  css  js  c++  java
  • 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中进行传值,但他调用一次的值就会被删除。

  • 相关阅读:
    adb devices检测不到夜神模拟器
    adb devices检测不到夜神模拟器
    adb devices检测不到夜神模拟器
    epoll里面mmap释疑
    epoll里面mmap释疑
    epoll里面mmap释疑
    epoll里面mmap释疑
    Redis数据迁移的三个方法
    Redis数据迁移的三个方法
    MySQL:由USE DB堵塞故障引发的思考
  • 原文地址:https://www.cnblogs.com/GmrBrian/p/6228813.html
Copyright © 2011-2022 走看看