ViewData和ViewBag

--摘录自ASP.NET MVC 4高级编程

从技术角度讲,数据从控制器传送到视图是通过一个名为 ViewData 的 ViewDataDictionary (这是一个特殊的字典类)。我们可以使用标准的字典语法设置或读取其中的值,实例如下:

ViewData["CurrentTime"] = DateTime.Now;

尽管这种语法现在也能使用,但是ASP.NET MVC 3拥有更简单的语法,它利用了C# 4 的 dynamic 字段。ViewBag 是 ViewData 的动态封装器。这样我们就可以按照下面的方式来设置值:

ViewBag.CurrentTime = DateTime.Now;

因此,ViewBag.CurrentTime 等同于 ViewData["CurrentTime"]。

大多数情况下,这两种语法彼此之间并不存在真正的技术差异。ViewBag 相对于字典语法而言仅仅是一种受开发人员欢迎的语法而已。

注意:尽管选择一种语法格式并不比选择另一种格式具有真正的技术优势,但是二者之间的一些关键差异还是需要知道的。

很明显的一个差异就是只有当要访问的关键字是一个有效的C#标识符时,ViewBag才起作用。例如,如果在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag访问。因为这样根本就无法通过编译。

另一个需要知道的重要差异是,动态值不能作为一个参数传递给扩展方法。因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。

如果其中任何一个参数是动态的,那么就不能通过编译。例如,这行代码就会编译失败:

@Html.TextBox("name",ViewBag.Name)。

要使这行代码通过编译有两种方法:第一是使用 ViewData["Name"],第二是把 ViewBag.Name 值转换为一个具体的类型:(string)ViewBag.Name。

ViewData和ViewBag

时间: 2024-11-05 00:40:28

ViewData和ViewBag的相关文章

Asp.net MVC中的ViewData与ViewBag

在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework ViewData比ViewBag快 ViewBag比ViewData慢 在ViewPage中查询数据时需要转换合适的类型 在V

浅谈 MVC中的ViewData、ViewBag和TempData

ViewBag和TempData的区别 ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework ViewData比ViewBag快 ViewBag比ViewData慢 在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换 有一些类型转换代码 可

.NET MVC TempData、ViewData、ViewBag

说明: 原文作者贤新 原文地址:http://www.cnblogs.com/chenxinblogs/p/4852813.html ViewData和ViewBag主要用于将数据从控制器中传递到视图中去,ViewData本身就是一个字典.以KeyValue的形式存取值.ViewData的Value类型是Object,也就是可以将任意类型的值存储到ViewData中去,平时我们都在控制器中直接使用ViewData.本质上ViewData只是Controller父类ControllerBase中的

Part 3 ViewData and ViewBag in mvc

ViewBag and ViewData is a mechanism(机制) to pass data from controller to view. We use '@' symbol(符号) to switch between html and C# code. Both ViewData and ViewBag are used to pass data from a controller to a view. ViewData is a dictionary of object th

ViewData,ViewBag和TempData

  ViewData ViewBag TempData 类型 字典 Dynamic TempDataDictionary 出生时间 MVC1 MVC3   框架版本 .net3.5 .net4.0   是否需要拆装箱 需要 不需要   存储数据周期 一次HTTP请求 一次HTTP请求 一次HTTP请求   前后台调用数据时可通用   如何理解ViewData和ViewBag数据可通用: 在后台 public ActionResult List() { ViewBag.test="this is

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

MVC中的ViewData、ViewBag和TempData

一.ViewBag和ViewData的定义 public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } 二.ViewBag和ViewData的区别 viewdata viewbag 它是key/value字典集合 它是dynamic类型对象 从asp.net mvc1就有了 从asp.netmvc3才有 基于asp.netframework 3.5 基于asp.net framework4.0

MVC5-8 ViewData、ViewBag、TempData分析

MVC中Contoller与视图的数据传输 后台的值显示到界面上,我们有几种方式呢.MVC给我们提供了ViewData.ViewBag.TempData.Model这几种方式,当然我们也可以用ajax获取, 本文对前三种进行源码上的分析. ViewData ViewData是一个ViewDataDictionary类型的字典 之前说过视图其实也是类,继承自WebViewPage.那么一堆都解释的通了,我们在返回视图的时候ViewData已经被塞入到了这个类中.我们在视图上根据key拿到value

Asp.net MVC中的ViewData与ViewBag(转)

在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才有 基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework ViewData比ViewBag快 ViewBag比ViewData慢 在ViewPage中查询数据时需要转换合适的类型 在V

MVC Controller向View传值(ViewData与ViewBag)

最近在开发项目中,使用的是ASP.NET MVC由于之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习! 一:使用 ViewData使用: public ActionResult Index() { List<string> colors = new List<string>(); colors.Add("red"); colors.Add("green"); colors.Add("blue"); Vi