ASP.NET MVC视图中允许多少逻辑?

时间:2009-01-14 14:40:49

标签: asp.net-mvc views

在查看ASP.NET MVC站点的示例时,我在视图中看到了很多嵌入式逻辑示例,例如:

<% if (customerIsAllowed)
   { %>

   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>

<% }  else {%>

   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>
   <p>nnn</p>

<% } %>

虽然这对我来说似乎不对,因为它是我们试图摆脱ASP 3.0的那种东西,我甚至在一些播客中听到过“一些逻辑在视野中是否正常”,因为其余的MVC框架正在处理我们在ASP 3.0中没有的结构。

是否有任何MVC约定指定视图中允许的逻辑类型和数量?

5 个答案:

答案 0 :(得分:38)

这取决于逻辑的原因。如果逻辑是根据控制器传递给它的某些属性选择备用表示,则可能没问题。这允许您进行一些视图重用。您可以传入一些允许根据此权限自定义视图的数据,而不必为每个自定义权限重新创建(并重复)整个视图。

我认为这是理想化的MVC和严格执行DRY之间的务实平衡(不要重复自己)。在某些情况下,如果你不能轻易地达到这两者,那么更明智地违反其中一个。在显然模型和基本视图相同的情况下,在视图中放置一些逻辑以保持您的视图DRY是合理的。

答案 1 :(得分:3)

如果逻辑属于视图的格式,并且不会导致对实体或数据的更改,那么我认为在视图中它是可以的。

答案 2 :(得分:1)

这是考虑它的另一种方式。演示逻辑在视图中。业务处理逻辑进入控制器,数据验证进入模型。但最终应该在哪里指导而不是宗教:)

答案 3 :(得分:1)

42

开个玩笑: - )

对此没有确定的答案,尽管良好的关注点分离是一种普遍接受的最佳实践。围绕这个问题的辩论可能是无穷无尽的,并且知道为你的特定项目做正确的方法,我想到的是经验,能够注意到“代码味道”或者感觉不对的事情。

答案 4 :(得分:1)

只要视图中的逻辑用于演示(如果你不喜欢它在标记文件中,你可以把它放在代码隐藏文件中)那么它就可以了。在您的示例中,代码/逻辑用于选择某个视图部分,这是正常的。允许演示文稿具有逻辑,它不需要只是HTML。