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>
UPDATE:
Вы можете убрать еще метку супа:
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>