我在ASP.NET MVC 3上做了一些工作,但我不是专家。
因此,基于模式定义,视图没有直接了解模型,也不直接与模型通信;只有控制器直接处理模型。
但是,在ASP.NET MVC 3中,我可以使用Razor引擎直接从视图访问模型数据。这不是打破了模式设计还是我错过了什么?
答案 0 :(得分:4)
视图没有直接了解模型,也没有直接与模型沟通
不完全是。具体如何解释这种说法可能取决于读者。
我已经在model-view-controller和asp.net-mvc上阅读了相当多的内容,我发现周围散布着类似的陈述,因此它的措辞方式可能有点令人困惑。
视图知道模型是什么。也就是说,它应该知道模型类型是什么,模型包含什么,或者通过某种方式知道如何使用模型来显示必要的内容。
如果我们有一个名为UserProfile
的网页,那么该视图就会知道它应该显示用户的姓名,电子邮件地址,年龄和喜爱的网站。
可能会告诉视图预期UserProfileViewModel
。这样的类将包含视图所需的属性,以便它可以轻松显示它们。
更好的说法是视图不应修改模型。事实上,该观点不应该做。视图应该是愚蠢的 - 它们不是用于处理业务规则,修改数据,连接到数据库等等。他们只是展示东西。
答案 1 :(得分:1)
模型包含数据,控制器操纵数据,视图显示数据(模型)。因此,视图是与用户的交互。
视图必须知道要显示的内容,因此它具有模型(及其数据)。它从不直接操作,而是将信息发送给控制器,而控制器又会操纵数据。
答案 2 :(得分:0)
我猜你错了 MVC 的概念。 MVC 并没有说“View不知道模型”。实际上,每个视图都与模型紧密耦合(除非视图耦合到动态模型或基本类型)。
MVC实际上是关注点的分离。
MVC只是一种模式,它不会阻止你在视图中编写业务逻辑或从视图中调用db。
答案 3 :(得分:0)
请参阅this article,了解三种不同类型的"型号"由ASP.NET MVC引入。
您所指的是 view 模型。此模型只是一个容器或方式提供视图负责显示的数据周围的结构。它只是一个数据传输对象(没有任何行为)。