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

  • 相关阅读:
    四则运算WEB版
    最大子数组问题
    四则运算终极版
    软件工程个人作业02
    软件工程概论-构建之法阅读笔记01
    软件工程概论个人作业01
    软件工程概论作业-测试
    123
    【好文转载】凡人修真传-程序员的十个等级
    有趣的网站
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7306377.html
Copyright © 2011-2022 走看看