ViewBag和ViewData之间的比较?

时间:2015-11-08 18:01:28

标签: asp.net asp.net-mvc c#-4.0

哪个更好将控制器中的数据引入ViewBag和ViewData中的.net MVC中?

3 个答案:

答案 0 :(得分:1)

ViewDataViewBag对象都非常适合访问控制器和视图之间的数据。

ViewBag对象允许您向其添加dynamic属性,这使其成为一个非常通用的工具。所以dynamic对象,意味着您可以在控制器中为其添加属性。它实现了与ViewData相同的目标,应该避免使用强类型视图模型。

答案 1 :(得分:0)

ViewBag是围绕ViewData的动态包装。

所以使用ViewData可以做到

ViewData["MyData"] = "Hello World"

您可以使用

获得相同的结果

ViewBag.MyData = "Hello World"

由于ViewBagdynamic,您可以访问可能实际不存在的属性,例如ViewBag.NothingToSeeHere代码仍将编译。运行该行代码时可能会遇到异常,但直到运行时才解析该属性。

可在此处找到更多信息

How ViewBag in ASP.NET MVC works

答案 2 :(得分:0)

正如Jason所说,“ViewBag是围绕ViewData的动态包装器”。

在大多数情况下,选择一种语法而不是真正的技术优势.ViewBag只是​​语法糖,有些人比字典语法更喜欢。
虽然可能没有技术优势要选择一种格式而不是另一种格式,两种语法之间需要注意一些重要的差异。

一个明显的区别是ViewBag仅在被访问的密钥是有效的C#标识符时才起作用。例如,如果在ViewData [“Key With Spaces”]中放置一个值,则无法使用ViewBag访问该值,因为代码将无法编译。

要注意的另一个关键问题是动态值不能作为参数传递给扩展方法。 C#编译器必须在编译时知道每个参数的实际类型,以便选择正确的扩展方法。

如果任何参数是动态的,编译将失败。例如,这段代码会 总是失败:@ Html.TextBox(“name”,ViewBag.Name)。要解决此问题,请使用ViewData [“Name”]或将值转换为特定类型:(string)ViewBag.Name。