2

据我了解,ViewModel 模式旨在将所有相关数据传递给 View,因为 1)视图不应执行任何数据检索或应用程序逻辑,以及 2)它支持类型安全、编译时检查和编辑器智能感知查看模板。

由于动态表达式是在运行时定义的,这是否意味着我们没有得到任何 2) 的好处?

4

1 回答 1

3

您不会丢失任何现有功能。您仍然可以拥有一个强类型视图,这样当您访问该Model属性时,它将是您指定的类型。唯一添加的是访问 ViewData 字典中项目的更短的方法。

而不是以下

ViewData["MyData"]

你可以有

View.MyData

请注意,您不会失去任何类型安全性,因为您从未真正拥有过任何类型安全性。在前一种情况下,键是一个字符串(不确定它是否存在于字典中),而值是一个对象,所以除非你强制转换它,否则你不能用它做太多事情。在后者中,您也没有智能感知,并且必须将返回值转换为有用的东西。

事实上,实现View.MyData只是简单地获取属性名称(“MyData”)并返回来自 ViewData 字典的值。

可以说,您失去的一件事是能够在您的键名中包含不是合法 C# 标识符的空格或其他字符。

于 2010-08-26T00:40:11.060 回答