使用备用视图引擎有什么好处?

Way*_*ina 5 asp.net-mvc viewengine spark-view-engine

我正在玩ASP.NET MVC,我发现有一些替代视图引擎可供它使用,例如NHaml和Spark.我的问题是你为什么要使用备用视图引擎?有这样的事情,我认为没有好处:

<ul if="products.Any()">
    <li each="var p in products">${p.Name}</li>
</ul>
<else>
    <p>No products available</p>
</else>
Run Code Online (Sandbox Code Playgroud)

使用Spark视图引擎(从那以后,我没有使用Spark来验证这一点并且可能完全错误,因为你将代码作为字符串传递,所以你不会得到Intellisense)和:

<% if products.Any() { %>
    <ul>
      <% foreach (var p in products) { %>
        <li><%= p.Name %></li>
      <% } %>  
    </ul>
<% } else { %>
    <p>No products available</p>
<% } %>
Run Code Online (Sandbox Code Playgroud)

使用内置的ASP.NET MVC模板格式(虽然我承认悬挂的大括号非常难看).有没有合理的理由除了不喜欢"gator"标签(或悬挂花括号)以考虑使用备用视图引擎?或者它是否很酷,因为它是新的东西?

que*_*en3 5

试着让它更复杂一点:

<div if="orders.Any()" each="var order in orders">
  Here's your order #${orderIndex+1}:
  <ul>
    <li each="var p in order.Products">
       ${pIndex}: ${p.Name}
       <span if="pIsLast"> (the end)</span>
    </li>
  </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

我可以看到这里的流程.我实际上可以在这里看到HTML.现在来看看:

<% if (orders.Any()) { %>
  <% var orderIndex = 0; foreach (var order in orders") { %>
   <div>
    Here's your order #<%= (orderIndex+1) %>
    <ul>
      <% int pIndex = 0; foreach (var p in order.Products) 
         { bool pIsLast = pIndex == products.Count; %>
        <li>
           <%= pIndex %>: <%= p.Name %>
           <% if (pIsLast) { %>
              <span> (the end)</span>
           <% } %>
        </li>
      <% ++ pIndex; } %>  
    </ul>
   </div>
  <% orderIndex++; } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

我迷失在这里.那里有HTML吗?

对我来说,这是主要原因.当然,Spark提供了很多功能 - 宏(你在火花标记中编写你的Html.Helpers代码),PDF导出等 - 由其他人列出 - 但作为程序员,我更喜欢干净的代码.

另一个例子,你经常使用(int i = 0; i <products.Count; i ++){Product product = products [i]; .... } 这些日子?你更喜欢foreach(产品中的var产品){}吗?我会.不仅因为打字更少.因为:

  • 它更好地表达了意图
  • 它看起来更好
  • 它隐藏了额外的细节(比如.Count,.Length或.Count();或者如果它是IEnumerable,你必须以特殊的方式遍历)来自我疲惫的心灵
  • 它减少了混乱环境的变量数量(以及我疲惫的心灵)
  • 因此,我可以专注于这个问题,没有任何阻碍
  • 它有助于避免{},因为内部不需要变量 - 减少行数
  • 当您将集合从IList更改为数组时,您不会在整个地方更改50个循环

那是关于foreach这样简单的事情.每个原因都很简单,但它们总结为更大的东西.这些原因完全适用于Spark.嘿,看起来我爱上了;-)

更新:现在,你知道吗?看看我的帖子的编辑历史.我不得不多次编辑该死的ASP代码,因为我在这里和那里错过了一些比特.我只是不明白它是对还是错.如果我在那里有跨度,或者在某个地方有条件,那就完全隐藏了.

更新:嗯,还有另一个编辑......移动ASP的if/span里面的li ...