viewdata和viewbag重载和重写的区别别

Asp.net MVC的ViewData与ViewBag以及TemplateData的使用与区别
时间: 14:14:07
&&&& 阅读:128
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
它是Key/Value字典集合
它是类型对像
从Asp.net MVC 1 就有了
ASP.NET MVC3 才有
基于Asp.net 3.5 framework
基于Asp.net 4.0与.net framework
ViewData比ViewBag快
ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型
在ViewPage中查询数据时不需要类型转换
有一些类型转换代码
可读性更好
一:类型比较
1.1)ViewBag是动态类型(dynamic)。
1.2)ViewData是一个字典型的(Dictionary)--&ViewDataDictionary。
1.3)TempData是一个字典型的(Dictionary)--&TempDataDictionary。
二:生命周期和作用域
2.1)ViewBag生命周期和View相同,只能作用于一个View。
2.2)ViewData生命周期和View相同,只能作用于一个View。
2.3)TempData生命周期为被调用前一直存在,但是调用一次的后值就会被删除,且可以在不同的Action中进行传值。
TempData 保存在Session中,Controller每次执行请求的时候,会从Session中先获取 TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从 ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。
三:使用区别
3.1)viewBag不需要数据转换
Controller: ViewBag.key = new Dictionary&string, string&();
@foreach (var item in ViewBag.key)
3.2)ViewBag中查询数据是需要转换数据类型
Controller:
ViewData["key"] = new Dictionary&string, string&() { { "key1", "value1" }, { "key2", "value2" } };
@foreach (var item in ViewData["key"] as Dictionary&string, string&)
3.3)TempData使用和ViewBag一样,但是注意TempData对应的值只要被调用一次后就会被自动清空。
原文参考:标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/EasonJim/p/6225429.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!.NET MVC中ViewData,ViewBag和TempData的区别浅析
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了.NET MVC中ViewData,ViewBag和TempData的区别,分析了ViewData,ViewBag和TempData在赋值、功能特性等方面的区别于用法,具有一定参考借鉴价值,需要的朋友可以参考下
本文分析了.NET MVC中ViewData,ViewBag和TempData的区别。分享给大家供大家参考。具体分析如下:
ViewData和TempData是字典类型,赋值方式用字典方式,如: 代码如下:ViewData["myName"]
ViewBag是动态类型,使用时直接添加属性赋值即可,如: 代码如下:ViewBag.myName
ViewBag和ViewData只在当前Action中有效,等同于View
TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除
ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData。
希望本文所述对大家的.net程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具文章数:78
访问量:5417
注册日期:
阅读量:1297
阅读量:3317
阅读量:583635
阅读量:468767
51CTO推荐博文
今天在练习MVC4做个首页,调试时出现了 当前上下文中不存在名称“ViewBag” 到网上找个几个解决方法,都没解决最后找到了一次解决方法::是因在VIew目录下没有Web.config的缘故,新建一个就可最主要是得有关于mvc的一些相关信息
了这篇文章
类别:未分类┆阅读(0)┆评论(0)ViewData与ViewBag比较 - CSDN博客
ViewData与ViewBag比较
在Asp.net MVC 3 web应用程序中,我们会用到与,对比一下:
它是Key/Value字典集合
它是类型对像
从Asp.net MVC 1 就有了
ASP.NET MVC3 才有
基于Asp.net 3.5 framework
基于Asp.net 4.0与.net framework
ViewData比ViewBag快
ViewBag比ViewData慢
在ViewPage中查询数据时需要转换合适的类型
在ViewPage中查询数据时不需要类型转换
有一些类型转换代码
可读性更好
在Controller中使用ViewData:
public ActionResult UsingViewData()
ViewData[&Title&] = & Using ViewData&;
ViewData[&ProjectName&] = &My Test Project&;
ViewData[&ProjectDescription&] = &This is Test Project to demo Viewdata and viewbag details&;
ViewData[&StartDate&] = new DateTime();
ViewData[&TotalPrice&] = 1000;
ViewData[&TotalDays&] = 100;
Dictionary&string, string& stackholder = new Dictionary&string, string&();
stackholder.Add(&Client&,&Mr.
stackholder.Add(&Manager&,&Mr. Joy&);
stackholder.Add(&Team Leader&,&Mr.Toy&);
stackholder.Add(&Sr. developer&, &Mr.dojoy&);
stackholder.Add(&developer&, &Mr. nodoy&);
ViewData[&stackholder&] =
List&string& modules = new List&string&();
modules.Add(&Admin module&);
modules.Add(&ShoppingCart module&);
modules.Add(&CMS module&);
ViewData[&modules&] =
return View();
对应UsingViewData View的cshtml:
&h1&@ViewData[&Title&]&/h1&
&h2&Project Name : @ViewData[&ProjectName&]&/h2&
ProjectDescription :
&p&&@ViewData[&ProjectDescription&]&.&/p&
Stack Holder :
&ul id=&stakholder&&
@foreach ( var stakerholder in ViewData[&stackholder&] as Dictionary&string, string& )
@stakerholder.Key & : @stakerholder.Value
Project Details:&br /&
module List
&ul id=&modulelist&&
@foreach ( var module in ViewData[&modules&] as List&string& )
Project StartDate : @ViewData[&StartDate&]
Project TotalPrice: @ViewData[&TotalPrice&] &br /&
Project TotaDays
: @ViewData[&TotalDays&]
然后是ViewBag:
public ActionResult UsingViewBag()
ViewBag.Title = & Using ViewBag&;
ViewBag.ProjectName = &My Test Project&;
ViewBag.ProjectDescription = &This is Test Project to demo Viewdata and viewbag details&;
ViewBag.StartDate = new DateTime();
ViewBag.TotalPrice = 1000;
ViewBag.TotalDays = 100;
Dictionary&string, string& stackholder = new Dictionary&string, string&();
stackholder.Add(&Client&, &Mr.
stackholder.Add(&Manager&, &Mr. Joy&);
stackholder.Add(&Team Leader&, &Mr.Toy&);
stackholder.Add(&Sr. developer&, &Mr.dojoy&);
stackholder.Add(&developer&, &Mr. nodoy&);
ViewBag.stackholder =
List&string& modules = new List&string&();
modules.Add(&Admin module&);
modules.Add(&ShoppingCart module&);
modules.Add(&CMS module&);
ViewBag.modules =
return View();
对应View UsingViewBag 的cshtml的ViewBag:
&h1&@ViewBag.Title&/h1&
&h2&Project Name : @ViewBag.ProjectName&/h2&
ProjectDescription :
&p&&@ViewBag.ProjectDescription.&/p&
Stack Holder :
&ul id=&stakholder&&
@foreach ( var stakerholder in ViewBag.stackholder )
@stakerholder.Key & : @stakerholder.Value
Project Details:&br /&
module List
&ul id=&modulelist&&
@foreach ( var module in ViewBag.modules )
Project StartDate : @ViewBag.StartDate.ToString(&dd-MMM-yyyy&) &br /&
Project TotalPrice: @ViewBag.TotalPrice
Project TotaDays
: @ViewBag.TotalDays
后面是在Controller中使用ViewBag:
public ActionResult UsingViewBagInControlAndViewDataInView()
ViewBag.Title = & Using ViewBag In Control And ViewData In View&;
ViewBag.ProjectName = &My Test Project&;
ViewBag.ProjectDescription = &This is Test Project to demo Viewdata and viewbag details&;
ViewBag.StartDate = new DateTime();
ViewBag.TotalPrice = 1000;
ViewBag.TotalDays = 100;
Dictionary&string, string& stackholder = new Dictionary&string, string&();
stackholder.Add(&Client&, &Mr.
stackholder.Add(&Manager&, &Mr. Joy&);
stackholder.Add(&Team Leader&, &Mr.Toy&);
stackholder.Add(&Sr. developer&, &Mr.dojoy&);
stackholder.Add(&developer&, &Mr. nodoy&);
ViewBag.stackholder =
List&string& modules = new List&string&();
modules.Add(&Admin module&);
modules.Add(&ShoppingCart module&);
modules.Add(&CMS module&);
ViewBag.modules =
return View();
在UsingViewBagInControlAndViewDataInView.cshtml中使用ViewData来取值:
&h1&@ViewData[&Title&]&/h1&
&h2&Project Name : @ViewData[&ProjectName&]&/h2&
ProjectDescription :
&p&&@ViewData[&ProjectDescription&]&.&/p&
Stack Holder :
&ul id=&stakholder&&
@foreach ( var stakerholder in ViewData[&stackholder&] as Dictionary&string, string& )
@stakerholder.Key & : @stakerholder.Value
Project Details:&br /&
module List
&ul id=&modulelist&&
@foreach ( var module in ViewData[&modules&] as List&string& )
Project StartDate : @ViewData[&StartDate&]
Project TotalPrice: @ViewData[&TotalPrice&] &br /&
Project TotaDays
: @ViewData[&TotalDays&]
反过来是这样的:
public ActionResult UsingViewDataInControlAndViewBagInView()
ViewData[&Title&] = & Using ViewData In Control And ViewBag In View&;
ViewData[&ProjectName&] = &My Test Project&;
ViewData[&ProjectDescription&] = &This is Test Project to demo Viewdata and viewbag details&;
ViewData[&StartDate&] = new DateTime();
ViewData[&TotalPrice&] = 1000;
ViewData[&TotalDays&] = 100;
Dictionary&string, string& stackholder = new Dictionary&string, string&();
stackholder.Add(&Client&, &Mr.
stackholder.Add(&Manager&, &Mr. Joy&);
stackholder.Add(&Team Leader&, &Mr.Toy&);
stackholder.Add(&Sr. developer&, &Mr.dojoy&);
stackholder.Add(&developer&, &Mr. nodoy&);
ViewData[&stackholder&] =
List&string& modules = new List&string&();
modules.Add(&Admin module&);
modules.Add(&ShoppingCart module&);
modules.Add(&CMS module&);
ViewData[&modules&] =
return View();
在UsingViewDataInControlAndViewBagInView.cshtml 的View中使用ViewBag来取值:
&h1&@ViewBag.Title&/h1&
&h2&Project Name : @ViewBag.ProjectName&/h2&
ProjectDescription :
&p&&@ViewBag.ProjectDescription.&/p&
Stack Holder :
&ul id=&stakholder&&
@foreach ( var stakerholder in ViewBag.stackholder )
@stakerholder.Key & : @stakerholder.Value
Project Details:&br /&
module List
&ul id=&modulelist&&
@foreach ( var module in ViewBag.modules )
Project StartDate : @ViewBag.StartDate.ToString(&dd-MMM-yyyy&) &br /&
Project TotalPrice: @ViewBag.TotalPrice
Project TotaDays
: @ViewBag.TotalDays
这样对比看上去会比较清楚一些。在源代码中的ViewBag是这样的属性:
public dynamic ViewBag {
if (_dynamicViewData == null) {
_dynamicViewData = new DynamicViewDataDictionary(() =& ViewData);
return _dynamicViewD
ViewData是:
public ViewDataDictionary ViewData {
if (_viewData == null) {
SetViewData(new ViewDataDictionary());
return _viewD
SetViewData(value);
本文已收录于以下专栏:
相关文章推荐
ViewData 和 TempData 都可以传递弱类型数据,区别如下:
ViewData 只在当前 Action 中有效,生命周期和 View 相同;
TempData 的数据至多只能经过一次C...
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: 
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:
它是Key/Valu...
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下:
它是Key/Va...
MVC使用过程中经常会用到TempData、ViewData、ViewBag三种方式,这三种什么区别呢?
TempData:默认存储于Session中,可通过继承ITempDataProvider接...
ViewData如何传值??
ViewBag如何传值??
ViewData和ViewBag的区别
转自:/qq/blog/item/f664cebf703a627.html
ViewData 和 TempData 都可以传...
Could any body explain, when to use
I have a requirement, where I ...
在MVC里,控制器返回数据到View,主要的方式通过ViewBag/ViewData/TempData,可三种方式有哪些区别呢。
public dynamic ViewBa...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 viewbag的用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信