在使用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>
最后的运行效果:
通过对比可以发现其实两者的运行结果是一样的,那么既然都能够实现相同的功能,那么两者同卵双胞胎到底有何异同点呢?下面就和小编来分析分析:
上面举例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类型,它可以在程序运行的时候动态解析,其实也就是在程序运行的时候占有了主动性,所以如果只是简单的显示值,根据自己的喜爱来使用就行。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-05 11:39:58