枚举到Asp.Net MVC View中的两列表

时间:2010-07-12 19:03:28

标签: c# asp.net-mvc

现在我有了这个代码,它一直枚举到一个单一的列表中。

有没有办法让它在彼此相邻的两个柱子一直到最后?

 <table>
<% foreach (var item in Model)
   { %>
   <tr>
        <td>
          <%=Html.Encode(item.PartNo)%>
       </td>
   </tr>

<% } %>

</table>

3 个答案:

答案 0 :(得分:4)

您可以将foreach循环更改为for循环以获得更大的灵活性:

<% var itemList = Model.ToList(); %>

<table>
<% for (int i=0; i < itemList.Count; i+=2))
   { %>
   <tr>
        <td>
          <%= Html.Encode(itemList[i].PartNo) %>
       </td>
       <td>
          <% if (i+1 < itemList.Count) 
             { 
                 Response.Write(Html.Encode(itemList[i+1].PartNo));
             }
           %>
       </td>
   </tr>
<% } %>
</table>

如果您正在做很多事情,可以考虑将其转换为HTML助手以输出任意数量的列。

答案 1 :(得分:1)

建立womp的答案,这是一个使用枚举器工作的示例(未经测试!),可以显示任意数量的列。这可能会解决您提到的一些问题。

<table><% 
    int numberOfColumns = 2;
    var enumerator = Model.GetEnumerator();
    bool endOfEnumerator = !enumerator.MoveNext();

    while(!endOfEnumerator)
    {   %>
    <tr><%
        for (int i = 0; i < numberOfColumns; i++)
        { %>
        <td>
            <%= Html.Encode(enumerator.Current.PartNo) %>
        </td><%
            if (!enumerator.MoveNext())
            {
                endOfEnumerator = true;
                break;
            }
        } %>
    </tr><%
    } %>
</table>

答案 2 :(得分:-1)

如果您只是在寻找额外的列,则可以保留foreach并添加<td></td>

<table> 
<% foreach (var item in Model) 
   { %> 
   <tr> 
        <td> 
          <%=Html.Encode(item.PartNo)%> 
       </td> 
       <td>
         <%=Html.Encode(item.NextPartNo)%> 
       </td>
   </tr> 

<% } %>