哪个更好将控制器中的数据引入ViewBag和ViewData中的.net MVC中?
答案 0 :(得分:1)
ViewData
和ViewBag
对象都非常适合访问控制器和视图之间的数据。
ViewBag
对象允许您向其添加dynamic
属性,这使其成为一个非常通用的工具。所以dynamic
对象,意味着您可以在控制器中为其添加属性。它实现了与ViewData
相同的目标,应该避免使用强类型视图模型。
答案 1 :(得分:0)
ViewBag
是围绕ViewData
的动态包装。
所以使用ViewData可以做到
ViewData["MyData"] = "Hello World"
您可以使用
获得相同的结果 ViewBag.MyData = "Hello World"
由于ViewBag
为dynamic
,您可以访问可能实际不存在的属性,例如ViewBag.NothingToSeeHere
代码仍将编译。运行该行代码时可能会遇到异常,但直到运行时才解析该属性。
可在此处找到更多信息
答案 2 :(得分:0)
正如Jason所说,“ViewBag是围绕ViewData的动态包装器”。
在大多数情况下,选择一种语法而不是真正的技术优势.ViewBag只是语法糖,有些人比字典语法更喜欢。
虽然可能没有技术优势要选择一种格式而不是另一种格式,两种语法之间需要注意一些重要的差异。
一个明显的区别是ViewBag仅在被访问的密钥是有效的C#标识符时才起作用。例如,如果在ViewData [“Key With Spaces”]中放置一个值,则无法使用ViewBag访问该值,因为代码将无法编译。
要注意的另一个关键问题是动态值不能作为参数传递给扩展方法。 C#编译器必须在编译时知道每个参数的实际类型,以便选择正确的扩展方法。
如果任何参数是动态的,编译将失败。例如,这段代码会 总是失败:@ Html.TextBox(“name”,ViewBag.Name)。要解决此问题,请使用ViewData [“Name”]或将值转换为特定类型:(string)ViewBag.Name。