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

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

  1. asp.net mvc ViewData 和 ViewBag区别,TempData

    ViewData 和 ViewBag都是页面级别的生命周期,TempData--Passing data between the current and next HTTP requests Temp ...

  2. ASP.NET MVC ViewData/ViewBag 简单小结

    近期在项目中遇到一个问题,就是用ViewBag.Model存储匿名对象传递给View,但是需要根据条件给匿名对象添加属性,这个可真心不易,Google了一下发现很多方案都是动态编译神马的,感觉好高大上 ...

  3. asp.net MVC ViewData详解

    转自:http://www.cnblogs.com/gaopin/archive/2012/11/13/2767515.html 控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 ...

  4. MVC ViewData和ViewBag[转]

    转自:http://blog.csdn.net/a497785609/article/details/7854402#t0       视图数据可以通过ViewBag属性访问,它主要是为了从Contr ...

  5. MVC ViewData和ViewBag

        视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的s ...

  6. MVC ViewData与ViewBag的区别

    一.ViewData 1.ViewData派生自ViewDataDictionary,所以它具有字典的属性,例如:ContainsKey .Add .Remove 和 Clear : 2.字典键值是字 ...

  7. MVC ViewData和ViewBag 参数名一样表示同一个值

    @ViewData["MenuName"] 和 @ViewBag.MenuName 表示同一个值

  8. 不用asp.net MVC,用WebForm照样可以实现MVC(请看最后一句话)

    在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的“诱导犯罪”的缺陷,现在用ASP.net MVC的公司越来越多.但是 ...

  9. 不用asp.net MVC,用WebForm照样能够实现MVC

    在<避开WebForm天坑,拥抱ASP.Net MVC吧>这篇博客中我讲到了ASP.net WebForm由于一些先天的"诱导犯罪"的缺陷,如今用ASP.net MVC ...

随机推荐

  1. c++:delete或free报错,语法正常。

    #include <stdio.h> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { ]; memcpy( ...

  2. Java方法传递参数传值还是传址的问题

    这几天重构项目代码遇到一个疑问:可不可以在方法A中定义一个boolean变量b为false,然后A调用方法C把b传递到C方法中经过一些列业务判断后修改为true,C执行结束后A方法中b的值还是原来的f ...

  3. 谈一谈flex布局使用中碰到的一些问题

    起因 工作以后由于大量使用到了flex布局而碰到了一些尚不清楚的问题,以及一些有意思的特性,在此写篇博客记录一下. flex三个值的含义 众所周知,flex布局所有的属性有两种:一种作用在弹性容器(F ...

  4. HTML5新增的主体元素article、section、nav、aside、time元素和pubdate属性

    article artticle元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引用的内容.它可以是一篇博客或者报刊中的文章,一篇论坛帖子,一段用户评论或者独立的插件或其他任何独立的内容. ...

  5. ASP.NET MVC中如何在客户端进行必要的判断

    背景:在开发网站时,往往需要对用户的输入进行合法性检查,如果验证工作都放在服务器端,势必将影响网页的响应速度,同时给用户不好的体验.本篇随笔即是使用JQuery在客户端进行必要的合法检测. JS代码如 ...

  6. MyBatis 3 分页

    利用MyBatis 3进行分页,选定的数据库表c_province,有3列,id列,provinceid列,province列,用Oracle数据库.首先建立一个对应的实体类,Province有3个属 ...

  7. 大数据学习——mapreduce学习topN问题

    求每一个订单中成交金额最大的那一笔  top1 数据 Order_0000001,Pdt_01,222.8 Order_0000001,Pdt_05,25.8 Order_0000002,Pdt_05 ...

  8. 大数据学习——mapreduce程序单词统计

    项目结构 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...

  9. HDU 5487 Difference of Languages

    Difference of Languages Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. ...

  10. Oracle中有关字符串操作的语法

    Oracle中有关字符串操作的语法 Oracle提供了丰富的字符串函数 lpad()函数 lpad()函数用于左补全字符串.在某些情况下,预期的字符串为固定长度,而且格式统一,此时可以考虑使用lpad ...