ASP.NET MVC中的条带表行(不使用jQuery或等效项)

Ric*_*ett 10 asp.net-mvc jquery

当使用ASP.NET WebForms ListView控件在HTML表中显示数据时,我使用以下技术来"条带化"表行:

<ItemTemplate>
    <tr class="<%# Container.DisplayIndex % 2 == 0 ? "" : "alternate" %>">
        <!-- table cells in here -->
    </tr>
</ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

使用以下CSS:

tr.alternate
{
    background-color: #EFF5FB;
}
Run Code Online (Sandbox Code Playgroud)

我刚刚浏览了ASP.NET MVC 电影数据库应用程序教程,并了解到在MVC-land表中的行可以(必须是?)构造如下:

<% foreach (var item in Model) { %>
    <tr>
        <td>
            <%= Html.Encode(item.Title) %>
        </td>
        <!-- and so on for the rest of the table cells... -->
    </tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)

我可以在此代码中添加哪些条带来划分表格的行?

注意:我知道这可以使用jQuery完成,我想知道它是否可以用另一种方式完成.

编辑

如果jQuery(或同等)在您看来是最好或最合适的帖子,我会有兴趣知道原因.

Joe*_*ler 31

另一个不涉及lambdas的选项,比你工作的更干净可能是这个......

<% int i=0; foreach (var item in Model) { %>
    <tr class="<%= i++ % 2 == 0 ? "alternate" : "" %>">
        <td>
            <%= Html.Encode(item.Title) %>
        </td>
        <!-- and so on for the rest of the table cells... -->
    </tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)

  • 感谢驾车-1.OP似乎对扩展方法方法感到不舒服,他称自己的解决方案很笨重,所以我提出了一个不使用扩展方法的选项,并且不那么笨重.为此我得到了投票? (5认同)
  • 我一个人,发现你的解决方案更简单,非常适合我自己的应用程序. (3认同)
  • 我也喜欢你的解决方案.就我而言,+1是+1. (2认同)

mea*_*ode 7

扩展方法怎么样?

public static void Alternate<T>(this IEnumerable<T> items, Action<T, bool> action)
{
    bool state = false;
    foreach (T item in items)
        action(item, state = !state);
}
Run Code Online (Sandbox Code Playgroud)

这样你可以说:

<% movies.Alternate((movie, alt) => { %>
  <tr class="<%= alt ? "alternate" : "" %>">
    <td>
        <%= Html.Encode(movie.Title) %>
    </td>
    <!-- and so on for the rest of the table cells... -->
  </tr>
<% }); %>
Run Code Online (Sandbox Code Playgroud)

编辑,另外如果你想要索引,你可以使用这样的扩展方法:

public static void Each<T>(this IEnumerable<T> items, Action<T, int> action)
{
    int state = 0;
    foreach (T item in items)
        action(item, state++);
}
Run Code Online (Sandbox Code Playgroud)