为什么View了解模型?

时间:2014-08-19 06:28:37

标签: asp.net-mvc asp.net-mvc-3 razor

我在ASP.NET MVC 3上做了一些工作,但我不是专家。

因此,基于模式定义,视图没有直接了解模型,也不直接与模型通信;只有控制器直接处理模型。

但是,在ASP.NET MVC 3中,我可以使用Razor引擎直接从视图访问模型数据。这不是打破了模式设计还是我错过了什么?

enter image description here

4 个答案:

答案 0 :(得分:4)

  

视图没有直接了解模型,也没有直接与模型沟通

不完全是。具体如何解释这种说法可能取决于读者。

我已经在上阅读了相当多的内容,我发现周围散布着类似的陈述,因此它的措辞方式可能有点令人困惑。

视图知道模型是什么。也就是说,它应该知道模型类型是什么,模型包含什么,或者通过某种方式知道如何使用模型来显示必要的内容。

如果我们有一个名为UserProfile的网页,那么该视图就会知道它应该显示用户的姓名,电子邮件地址,年龄和喜爱的网站。

可能会告诉视图预期UserProfileViewModel。这样的类将包含视图所需的属性,以便它可以轻松显示它们。

更好的说法是视图不应修改模型。事实上,该观点不应该。视图应该是愚蠢的 - 它们不是用于处理业务规则,修改数据,连接到数据库等等。他们只是展示东西。

答案 1 :(得分:1)

模型包含数据,控制器操纵数据,视图显示数据(模型)。因此,视图是与用户的交互。

视图必须知道要显示的内容,因此它具有模型(及其数据)。它从不直接操作,而是将信息发送给控制器,而控制器又会操纵数据。

答案 2 :(得分:0)

我猜你错了 MVC 的概念。 MVC 并没有说“View不知道模型”。实际上,每个视图都与模型紧密耦合(除非视图耦合到动态模型或基本类型)。

MVC实际上是关注点的分离。

  1. 控制器决定业务规则并决定向用户显示哪些数据。
  2. 然后填充模型
  3. 然后将模型传递给查看。 (想想它就像传递一些数据在视图上显示一样)。
  4. 现在查看不知道如何创建模型以及验证模型规则。
  5. 模型不知道哪个视图会消耗它。可以有很多视图与模型相结合。
  6. 控制器不知道模型验证或视图中显示的模型属性。
  7. MVC只是一种模式,它不会阻止你在视图中编写业务逻辑或从视图中调用db。

答案 3 :(得分:0)

请参阅this article,了解三种不同类型的"型号"由ASP.NET MVC引入。

您所指的是 view 模型。此模型只是一个容器或方式提供视图负责显示的数据周围的结构。它只是一个数据传输对象(没有任何行为)。