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

Edw*_*uay 32 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>

<% } %>
Run Code Online (Sandbox Code Playgroud)

虽然这对我来说似乎是错误的,因为它是我们试图摆脱ASP 3.0的那种东西,我甚至在一些播客中听到过"MVC框架的其余部分"中的"一点点逻辑是否正常"正在照顾我们在ASP 3.0中没有的结构.

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

tva*_*son 39

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

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

  • 曾经注意到讽刺的是,当人们提到DRY时,几乎总是必须将其扩展到括号​​中(不要重复自己).从本质上讲,他们在解释规则时打破了规则. (4认同)