ASP.net MVC+ViewData VS ViewBag
在使用MVC框架的过程中,往界面传值,我们使用的ViewData。如ITOO部分代码图解:
当然除了ViewData,我们还能够使用同卵兄弟(ViewBag)来完毕相同的功能,详情demo:
我们先看看经常使用的ViewData的Controller和View以及执行情况:
Controller简易代码:
public ActionResult Index()
{
//定义了一个集合Fruits
List<string> Fruits = new List<string>();
Fruits.Add("apple");
Fruits.Add("banana");
Fruits.Add("orange");
//将Fruits集合赋值给ViewData
ViewData["ListFruits"]
= Fruits;
//简单赋值
ViewData["name"]
= "huohuo"; return View();
}
View简易代码:
<html>
<p>
@*这是我们经常使用的一种,直接把ViewData单个赋值显示到页面上*@
My name is <b>@ViewData["name"]</b><br />
I just want to eat some Fruits, like:
</p>
<ul id="fruit">
@*因为是一个数组/集合,所以必须遍历才可以实现*@
@foreach (var fruit in ViewData["ListFruits"] as List<string>)
{
<li><font fruit="@fruit">@fruit</font></li>
}
</ul>
</html>
最后执行的效果:
先不说不论什么结果,我们紧接着看看ViewBag的Controller,View和执行结果:
Controller简易代码:
public ActionResult Index()
{
List<string>Fruits = new List<string>();
Fruits.Add("apple");
Fruits.Add("banana");
Fruits.Add("orange");
ViewBag.ListFruits = Fruits; //colors
ViewBag.Name
= "huohuo";
return View();
}
View简易代码:
<html>
<p>
@*这是我们经常使用的一种。直接把ViewData单个赋值显示到页面上*@
My name is <b>@ViewBag.Name</b><br />
I just want to eat some Fruits, like:
</p>
<ul id="fruit">
@*因为是一个数组/集合,所以必须遍历才可以实现*@
@foreach (var fruit in ViewBag.ListFruits)
{
<li><font >@fruit</font></li>
}
</ul>
</html>
最后的执行效果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
通过对照可以发现事实上两者的执行结果是一样的,那么既然都可以实现同样的功能。那么两者同卵双胞胎究竟有何异同点呢?以下就和小编来分析分析:
上面举例demo仅仅是想表达一下执行的效果,事实上对于ViewData和ViewBag,两者并没有什么差别。仅仅是ViewData出生的比較早而已。他是在Viewdata的成长基础上又优化了一下自己的功能而已。
| ViewData | ViewBag | |
|---|---|---|
| 类型 | Key/Value字典集合 | dynamic类型对象 |
| 出生基础 | 基于ASP.Net 3.5 | 基于ASP.Net 4.0 |
| 速度 | 快 | 慢 |
| 是否须要类型转换 | 须要转换合适类型 | 无需转换 |
| 基于时期 | Asp.net MVC 1就出生了 | MVC 3 才出世 |
至与我们为什么一直用ViewData,我想基本的原因还是由于速度相对快些,虽然有时候须要通过Json字符串来传值,可是这也是无关紧要的,对于ViewBag。不同的就是多了一层Dynamic类型,它能够在程序执行的时候动态解析。事实上也就是在程序执行的时候占有了主动性,所以假设仅仅是简单的显示值,依据自己的喜爱来使用即可。
ASP.net MVC+ViewData VS ViewBag的更多相关文章
- asp.net mvc ViewData 和 ViewBag区别,TempData
ViewData 和 ViewBag都是页面级别的生命周期,TempData--Passing data between the current and next HTTP requests Temp ...
- ASP.NET MVC ViewData/ViewBag 简单小结
近期在项目中遇到一个问题,就是用ViewBag.Model存储匿名对象传递给View,但是需要根据条件给匿名对象添加属性,这个可真心不易,Google了一下发现很多方案都是动态编译神马的,感觉好高大上 ...
- asp.net MVC ViewData详解
转自:http://www.cnblogs.com/gaopin/archive/2012/11/13/2767515.html 控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 ...
- MVC ViewData和ViewBag[转]
转自:http://blog.csdn.net/a497785609/article/details/7854402#t0 视图数据可以通过ViewBag属性访问,它主要是为了从Contr ...
- MVC ViewData和ViewBag
视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的s ...
- MVC ViewData与ViewBag的区别
一.ViewData 1.ViewData派生自ViewDataDictionary,所以它具有字典的属性,例如:ContainsKey .Add .Remove 和 Clear : 2.字典键值是字 ...
- MVC ViewData和ViewBag 参数名一样表示同一个值
@ViewData["MenuName"] 和 @ViewBag.MenuName 表示同一个值
- 不用asp.net MVC,用WebForm照样可以实现MVC(请看最后一句话)
在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的“诱导犯罪”的缺陷,现在用ASP.net MVC的公司越来越多.但是 ...
- 不用asp.net MVC,用WebForm照样能够实现MVC
在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的"诱导犯罪"的缺陷,如今用ASP.net MVC ...
随机推荐
- PHP19 PHPStorm2018和GitHub的使用
目的 使用GitHub的代码仓库进行项目代码托管. 准备工作 1.在GitHub注册账号 https://github.com/ 2.Start a Project 登陆后创建一个项目 3.创建版本仓 ...
- ES6 第三章 变量的解构赋值 具体参照http://es6.ruanyifeng.com
1.基本用法 let [a, b, c] = [1, 2, 3];左右两边解构格式要保持一致. 2.默认值 let [x, y = 'b'] = ['a']; // x='a', y='b' let ...
- 常用字符串匹配算法(brute force, kmp, sunday)
1. 暴力解法 // 暴力求解 int Idx(string S, string T){ // 返回第一个匹配元素的位置,若没有匹配的子串,则返回-1 int S_size = S.length(); ...
- Mybatis 头信息
在使用IDEA开发中,如果不使用Mybatis-Generator时,那么就需要手写Mapper文件,而在创建xml文件时无法直接创建带有mybatis头信息的mapper文件,这里来记录一下Myba ...
- 常用mysql
搜索差价 select count(*) from gate_okex_cj; select * from (select count(*) as a_cj,coin from gate_okex_c ...
- noi.ac NOIP2018 全国热身赛 第四场 T1 tree
[题解] 考虑从小到大枚举边权,按顺序加边. 当前树被分成了若干个联通块,若各个块内的点只能跟块外的点匹配,那么最终的min g(i,pi)一定大于等于当前枚举的边. 判断各个联通块内的点是否全部能跟 ...
- JavaScript 的类型
var a ="111"; console.log(a.constructor);//function String() { [native code]} var b= Strin ...
- sql语句中嵌套2层循环
declare @year intdeclare @month intset @year=2008 while(@year<=2011)beginset @month=1while(@month ...
- .net异步编程async和await的讨论收获
微软官方描述: C# 5 引入了一种简便方法,即异步编程.此方法利用了 .NET Framework 4.5 及更高版本..NET Core 和 Windows 运行时中的异步支持. 编译器可执行开发 ...
- [Istio]Kubernetes集群部署Istio 1.0
大部分内容都是可以根据https://istio.io/docs/setup/kubernetes/quick-start/来处理的,这里主要谈部署时一些细节的问题 首先,当我们按照 istio 官方 ...