2010-08-26 58 views
2

在我的理解中,ViewModel模式被设计为将所有相关数据传递给View,因为1)视图不应该执行任何数据检索或应用程序逻辑,2)它使类型安全,编译时检查和编辑器视图模板内的智能感知。新的ViewModel不会过时ASP.NET MVC 3中的ViewModel模式,对吗?

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

回答

3

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

取而代之的是以下

ViewData["MyData"] 

你可以有

View.MyData 

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

实际上,View.MyData的实现只是使用属性名称(“MyData”)并返回来自ViewData字典的值。

可以说,你失去的一件事就是能够在你的密钥名称中有空格或其他字符不是合法的C#标识符。

+0

是的,这是我正在辩论,这证实了我的疑惑。 – randomguy 2010-08-26 00:43:18