在使用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类型,它能够在程序执行的时候动态解析。事实上也就是在程序执行的时候占有了主动性,所以假设仅仅是简单的显示值,依据自己的喜爱来使用即可。