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

  • 相关阅读:
    SQL DATE_SUB 函数用法
    MySQL中concat函数(连接字符串)
    Mysql命令
    PHP 数字转汉字函数
    php 递归的生成目录函数
    我的SublimeText配置
    常见HTTP状态200,304,403,404,503
    鞋子特大号歌词
    去掉iframe白色背景方法
    php 空格无法替换,utf-8空格惹的祸
  • 原文地址:https://www.cnblogs.com/GmrBrian/p/6228813.html
Copyright © 2020-2023  润新知