• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC中viewData、viewBag和templateData的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
RDLC报表带搜索与传参数功能演示(ASP.NETMVC)发布时间:2022-07-10
下一篇:
ASP.NETMVC开发微信支付H5(外置浏览器支付)发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap