2010-04-17 27 views
1

帮我将这段代码,我和ReSharper的不喜欢它:风格奇数表行

<table width="100%"> 
<% for (int row = 0; row < 10; ++row) {%> 
<%= "<tr" + ((row % 2 == 0) ? " class='even'" : "") + ">" %> 

... 

</tr> 
<%}%> 
</table> 
+0

另一种方式交替: INT倒装= 0; <%为(ⅰ... //内^ = 1的循环 倒装; <%= “”%> ... <% } %> – 2010-04-18 16:18:26

回答

5

使用jQuery,做在客户端上 - 您的视图代码会这么干净多了。

$(document).ready(function(){ 
    $("table tr:even").addClass("even"); 
}); 
2
public static class TableExtensions 
{ 
    public static string StartRow(this HtmlHelper htmlHelper, int row) 
    { 
     var builder = new TagBuilder("tr"); 
     if (row % 2 == 0) 
     { 
      builder.MergeAttribute("class", "even"); 
     } 
     return builder.ToString(TagRenderMode.StartTag); 
    } 
} 

和:

<table width="100%"> 
<% for (var rowIndex = 0; rowIndex < 10; ++rowIndex) { %> 
    <%= Html.StartRow(rowIndex) %> 
    .... 
    </tr> 
<% } %> 
</table> 

更新:

你可以进一步清理标签汤:

public static class TableExtensions 
{ 
    private class Row : IDisposable 
    { 
     private readonly TextWriter _writer; 
     private bool _disposed; 

     public Row(ViewContext viewContext) 
     { 
      _writer = viewContext.Writer; 
     } 

     public void Dispose(bool disposing) 
     { 
      if (!_disposed) 
      { 
       _disposed = true; 
       _writer.Write("</tr>"); 
      } 
     } 

     public void Dispose() 
     { 
      this.Dispose(true); 
      GC.SuppressFinalize(this); 
     } 
    } 

    public static IDisposable BeginRow(this HtmlHelper htmlHelper, int rowIndex) 
    { 
     var builder = new TagBuilder("tr"); 
     if (rowIndex % 2 == 0) 
     { 
      builder.MergeAttribute("class", "even"); 
     } 
     htmlHelper.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag)); 
     return new Row(htmlHelper.ViewContext); 
    } 


    public static string StartRow(this HtmlHelper htmlHelper, int row) 
    { 
     var builder = new TagBuilder("tr"); 
     if (row % 2 == 0) 
     { 
      builder.MergeAttribute("class", "even"); 
     } 
     return builder.ToString(TagRenderMode.StartTag); 
    } 
} 

并在视图:

<table width="100%"> 
<% for (var rowIndex = 0; rowIndex < 10; ++rowIndex) { %> 
    <% using (Html.StartRow(rowIndex)) { %> 
     <td>value 1</td> 
     <td>value 2</td> 
    <% } %> 
<% } %> 
</table> 
+0

不知道这是值得的一次性表我感谢 – ripper234 2010-04-17 12:04:22

+0

然后你需要在行上的自定义属性和扩展你的帮手......并最终做MvcContrib网格;-) – queen3 2010-04-17 14:12:27

1

Rails有cycle method做到这一点。

菲尔哈克created one到ASP.NET MVC

所以,你可以使用这样

<style> 
    .first {background-color: #ddd;} 
    .second {background-color: khaki;} 
</style> 

<table> 
<% for (int i = 0; i < 5; i++) { %> 
    <tr class="<%= Html.Cycle("first", "second") %>"> 
     <td>Stuff</td> 
    </tr> 
<% } %> 
</table> 
0

如果在一个屏幕上有多个表格it works better,请使用第n个子项。

$(function() { 
     $('table tr:nth-child(even)').addClass("even"); 
    });