码迷,mamicode.com
首页 > 其他好文 > 详细

ViewData和ViewBag

时间:2014-08-02 07:30:24      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:使用   io   数据   cti   ar   代码   html   htm   

--摘录自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,布布扣,bubuko.com

ViewData和ViewBag

标签:使用   io   数据   cti   ar   代码   html   htm   

原文地址:http://www.cnblogs.com/otfngo/p/3886356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!