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