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类型,它可以在程序运行的时候动态解析,其实也就是在程序运行的时候占有了主动性,所以如果只是简单的显示值,根据自己的喜爱来使用就行。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-29 17:56:41

ASP.net MVC+ViewData VS ViewBag的相关文章

asp.net mvc ViewData 和 ViewBag区别,TempData

ViewData 和 ViewBag都是页面级别的生命周期,TempData--Passing data between the current and next HTTP requests TempData默认是实现方式--存在session中,所以结论很简单,能不用就不用..要么负载时就麻烦了. Passing data between the current and next HTTP requests - See more at: http://www.rachelappel.com/w

ASP.NET MVC ViewData/ViewBag 简单小结

近期在项目中遇到一个问题,就是用ViewBag.Model存储匿名对象传递给View,但是需要根据条件给匿名对象添加属性,这个可真心不易,Google了一下发现很多方案都是动态编译神马的,感觉好高大上,最后也没采用,因为不知道动态编译的性能消耗大不大. 最后是自己简单研究了一下,在ViewBag.Model中存储了Dictionary<string, object>,在View通过Model[key]的方式可以正常读取相应的值,在此对ViewData和ViewBag的使用进行一个简单的小结:1

asp.net MVC ViewData用法

控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 在action中我们将字符串保存在ViewData(或ViewBag [asp.net 3或以上才可用])中代码如下: public ActionResult Index()        {            ViewData["str1"]= "这是一个字符串"; //也可以使用ViewBag来传递值 ViewBag.str2="这是另外一个字符串"; return V

asp.net MVC ViewData详解

控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 在action中我们将字符串保存在ViewData(或ViewBag [asp.net 3或以上才可用])中代码如下: public ActionResult Index()        {            ViewData["str1"]= "这是一个字符串"; //也可以使用ViewBag来传递值 ViewBag.str2="这是另外一个字符串"; return V

MVC ViewData和ViewBag[转]

转自:http://blog.csdn.net/a497785609/article/details/7854402#t0 视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测.如: Controller ? public  ActionResult Index() { List<string>

MVC ViewData和ViewBag

视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测.如: Controller public  ActionResult Index() { List<string> colors = new  List<string>(); colors.Add("red")

MVC ViewData与ViewBag的区别

一.ViewData 1.ViewData派生自ViewDataDictionary,所以它具有字典的属性,例如:ContainsKey .Add .Remove 和 Clear : 2.字典键值是字符串类型,所以可以带空格,例如ViewData["a  b"]; 3.在视图中,只有string类型的值才能直接使用,其他的必须强制转换: 二.ViewBag 1.ViewBag派生自 DynamicViewData,所以它可以使用' '.'用法(ViewBag.A="张三&qu

不用asp.net MVC,用WebForm照样可以实现MVC

在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的“诱导犯罪”的缺陷,现在用ASP.net MVC的公司越来越多.但是根据填写了"ASP.net MVC的免费网络公开课"调查表的统计,我们发现有一大半的人还没有使用过ASP.Net MVC,而没用过ASP.net MVC的人中竟然有很多人人是因为感觉ASP.Net 难.没时间学.调查表分析数据如下: 初看ASP.net确实难:复杂的路由机制. ViewDa

Asp.net MVC中关于@Html标签Label、Editor使用

@Html帮助器简单说明,记录些基本的跟HTML中对应的@html帮助器,@Html基本包含了html中的表单控件和常用Html在@Html中,带有For的主要是针对强类型的Html类型.用于说明@Html中标签,定义Student对象用于辅助说明, [csharp] view plain copy public class Student { /// <summary> /// 姓名 /// </summary> /// [DisplayName("姓名")]