Как я могу создать горизонтальную таблицу в одном цикле foreach в MVC? - PullRequest
4 голосов
/ 10 июня 2010

Есть ли в ASP.Net MVC какой-либо способ сжать следующий код в один цикл foreach?

<table class="table">
    <tr>
        <td>
            Name
        </td>    
        <% 
        foreach (var item in Model) 
        {
         %>
            <td>
                <%= item.Name %>
            </td>
        <% 
        } 
        %>
    </tr>
    <tr>
        <td>
            Item
        </td>    
        <% 
        foreach (var item in Model) 
        {
         %>
            <td>
                <%= item.Company %>
            </td>
        <% 
        } 
        %>
    </tr>
</table>

Где модель IEnumerable<SomeObject>:

public class SomeObject
{
   public virtual Name {get;set;}
   public virtual Company {get;set;}
}

Будет выведена таблица следующим образом:

Name     |    Bob    |     Sam    |    Bill   |     Steve    |
Company  |  Builder  |   Fireman  |     MS    |     Apple    |

Я знаю, что, возможно, мог бы использовать метод расширения для записи каждой строки, но возможно ли построить все строки, используя одну итерацию по модели?

Это продолжение этого вопроса , поскольку я недоволен принятым ответом и не могу поверить, что предоставил лучшее решение.

Ответы [ 3 ]

0 голосов
/ 11 июня 2010

Если вы не ограничены использованием чистых таблиц, тогда это будет работать для вас.

<table class="table"> 
    <tr> 
        <th> 
             Name<br/>
             Item<br/>
        </th>     
        <%  
        foreach (var item in Model)  
        { 
         %> 
            <td> 
                  <%= Html.Encode(item.Name) %><br/>
                  <%= Html.Encode(item.company) %><br/>
            </td> 
        <%  
        }  
        %> 
    </tr> 
</table> 

Вы можете определенно улучшить это, используя стили span и css.

0 голосов
/ 15 января 2015

Очень старая нить, но ...

Я использовал следующее (но искал лучшего подхода, когда натолкнулся на этот вопрос)

Создайте блок кода, который перебирает объекты и создает HTML для каждой строки в переменной, а затем выводит переменную.

Плюс в том, что вы выполняете циклы только один раз и у вас нет вложенных таблиц (так что с большей вероятностью выстроятся в очередь), но минусом является строковое манипулирование html.

Вероятно, следует использовать string Builder, а не string, но принцип тот же.

 @code
        Dim tr1 As String = "<th>Name</th>"
        Dim tr2 As String = "<th>Company</th>"

        For Each thingy As object In Model

            tr1 += "<th>" & thingy.Name & "</th>"
            tr2 += "<th>" & thingy.Company & "</th>"

        Next



        End Code

        @<table class="table table-condensed">
            <tr>@Html.Raw(tr1)</tr>
            <tr>@Html.Raw(tr2)</tr>
         </table>
0 голосов
/ 10 июня 2010

Проверьте следующий коврик, это поможет вам

<table class="table">
    <tr>
        <td>
            <table>
                <tr><td>Name</td></tr>
                <tr><td>Item</td></tr>
             <table>
        </td>    
        <% 
        foreach (var item in Model) 
        {
         %>
            <td>
                <table>
                  <tr><td><%= item.Name %></td></tr>
                  <tr><td><%= item.company %></td></tr>
                <table>
            </td>
        <% 
        } 
        %>
    </tr>
</table>

Примечание: -

No check though :)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...