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>
最后的执行效果:

     通过对照可以发现事实上两者的执行结果是一样的,那么既然都可以实现同样的功能。那么两者同卵双胞胎究竟有何异同点呢?以下就和小编来分析分析:

     上面举例demo仅仅是想表达一下执行的效果,事实上对于ViewData和ViewBag,两者并没有什么差别。仅仅是ViewData出生的比較早而已。他是在Viewdata的成长基础上又优化了一下自己的功能而已。

ViewData VS ViewBag
  ViewData ViewBag
类型 Key/Value字典集合 dynamic类型对象
出生基础 基于ASP.Net  3.5 基于ASP.Net 4.0
速度
是否须要类型转换 须要转换合适类型 无需转换
基于时期 Asp.net MVC 1就出生了 MVC 3 才出世

     至与我们为什么一直用ViewData,我想基本的原因还是由于速度相对快些,虽然有时候须要通过Json字符串来传值,可是这也是无关紧要的,对于ViewBag。不同的就是多了一层Dynamic类型,它能够在程序执行的时候动态解析。事实上也就是在程序执行的时候占有了主动性,所以假设仅仅是简单的显示值,依据自己的喜爱来使用即可。

posted on 2017-08-08 13:31  yjbjingcha  阅读(136)  评论(0编辑  收藏  举报

导航