浅谈 MVC中的ViewData、ViewBag和TempData
2017-02-13 23:27
911 查看
ViewBag和TempData的区别
在控制器(Controller)中使用
ViewData:
Controller里取数据赋值
* 前台调用
ViewBag :
Controller里取数据赋值
前台调用:
按F12运行网站便可以看到运行结果,两个也可以用于不分页的新闻列表。
TempData
TempData也是字典,所以它的使用完全等同于ViewData,但两者之间还是存在很大的差异。
TempData,顾名思义,就是临时数据。TempData保存在Session中,Controller每次请求的时候都会从Session中获取TempData,然后清除Session。基于这样的事实,在每次请求结束后,TempData的生命周期也就结束了。网上有一句话:TempData至多之只能通过一次Controller传递,假设我们的Controller是跳转到下一个Controller,以此类推,在最后一个Controlle相应的视图上,的确可以获得该TempData。但是,这并不是说TempData已经跨请求传递了,这依然只是一次请求,至于是否是跨Controller传递,我认为不是,所谓的通过Controller传递,是指将TempData传递给View,在上面的例子中,只有最后的Controller才会将该TempData传递给View,所以,TempData的确是只能通过一次Controller传递。
注:有的文字内容搜自博客园。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/20/e4093b3f6f585fe411fdc40a33bbad4c.jpg)
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中查询数据时不需要类型转换 |
有一些类型转换代码 | 可读性更好 |
ViewData:
Controller里取数据赋值
var markeType = new MarketDataProvider().GetBTIDData().Where(a=>a.ID!="0"); //在数据库获取数据,这是list数据 ViewBag.DateType = markeType;//给ViewBag.DateType 赋值 “DateType ”可以随便写名称。
* 前台调用
@foreach (var modelMarket in ViewData["Markettype"] as Dictionary<string, string>) { <div class="row" style="margin-top:10px"> <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket.Value</div> </div> }
ViewBag :
Controller里取数据赋值
string str = "商标,版权,交易,国际注册"; string[] strs = str.Split(','); Dictionary<string, string> dic = new Dictionary<string, string>(); for(int i=0;i<5;i++) { dic.Add(i.ToString(),strs[i]); } ViewData["Markettype"] = dic;
前台调用:
@foreach (var modelMarket2 in ViewBag.DateType) { <div class="row" style="margin-top:10px"> <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket2.Text</div> </div> }
按F12运行网站便可以看到运行结果,两个也可以用于不分页的新闻列表。
TempData
TempData也是字典,所以它的使用完全等同于ViewData,但两者之间还是存在很大的差异。
TempData,顾名思义,就是临时数据。TempData保存在Session中,Controller每次请求的时候都会从Session中获取TempData,然后清除Session。基于这样的事实,在每次请求结束后,TempData的生命周期也就结束了。网上有一句话:TempData至多之只能通过一次Controller传递,假设我们的Controller是跳转到下一个Controller,以此类推,在最后一个Controlle相应的视图上,的确可以获得该TempData。但是,这并不是说TempData已经跨请求传递了,这依然只是一次请求,至于是否是跨Controller传递,我认为不是,所谓的通过Controller传递,是指将TempData传递给View,在上面的例子中,只有最后的Controller才会将该TempData传递给View,所以,TempData的确是只能通过一次Controller传递。
注:有的文字内容搜自博客园。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/20/e4093b3f6f585fe411fdc40a33bbad4c.jpg)
相关文章推荐
- ASP.NET MVC 3中ViewBag, ViewData和 TempData 推荐
- MVC页面常见三种传值方式——ViewData,ViewBag,TempData
- MVC传递Model之TempData、ViewData、ViewBag区别及用途
- ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
- MVC中 ViewData、ViewBag、TempData的区别与联系
- MVC控制器传递多个Model到视图,使用ViewData, ViewBag, 部分视图, TempData, ViewModel, Tuple
- 《MVC》——ViewData、ViewBag、TempData、model
- MVC中ViewBag、ViewData和TempData 的区别与联系
- asp.net mvc中ViewData、ViewBag和TempData的详解
- MVC到底使用哪种方式传递Model,在ViewData、ViewBag、PartialView、TempData、ViewModel、Tuple之间取舍
- ASP.Net MVC中 ViewBag, ViewData, TempData, ViewModel 的区别
- asp.net mvc 中 tempdata、viewdata、viewbag生命周期(转载)
- MVC之-- ViewData vs ViewBag vs TempData vs Session
- ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
- MVC 的ViewBag, ViewData and TempData使用与区别
- MVC页面常见三种传值方式——ViewData,ViewBag,TempData
- MVC中的ViewData与ViewBag与TempData的区别
- MVC到底使用哪种方式传递Model,在ViewData、ViewBag、PartialView、TempData、ViewModel、Tuple之间取舍
- mvc源码解读(4)-ViewData&ViewBag&TempData&ViewModel
- MVC传递Model之TempData、ViewData、ViewBag差别及用途