根据我的理解,ViewModel模式旨在将所有相关数据传递给View,因为1)视图不应执行任何数据检索或应用程序逻辑; 2)它支持类型安全,编译时检查,以及视图模板中的编辑器智能感知。
由于动态表达式是在运行时定义的,这是否意味着我们没有得到任何一个好东西?
答案 0 :(得分:3)
您不会丢失任何现有功能。您仍然可以使用强类型视图,以便在访问Model
属性时,它将是您指定的类型。唯一添加的是访问ViewData字典中的项目的更短方式。
而不是以下
ViewData["MyData"]
你可以
View.MyData
请注意,您没有丢失任何类型安全性,因为您从未真正拥有任何类型安全性。在前一种情况下,键是一个字符串(不确定它是否存在于字典中),并且值是一个对象,所以除非你使用它,否则你不能用它做那么多。在后者中,你也没有智能感知,返回的值必须被转换为有用的东西。
实际上View.MyData
的实现只需要获取属性名称(“MyData”)并返回来自ViewData字典的值。
可以说,您失去的一件事就是能够在您的密钥名称中包含空格或其他不是合法C#标识符的字符。