MVC Razor View - упаковка строк, построенных с помощью цикла foreach, каждые n элементов - PullRequest
0 голосов
/ 14 июля 2011

У меня есть вид Razor, который выглядит примерно так:

@foreach (var item in Model.Items)
{
    <div class="product">
        <a class="hide" href="#">
            <img src="#" alt="Hide" />
        </a><a href="#">
            <img src="#" width ="138" height="140" alt="product name" />
        </a>
        <h4 class="title">@Html.Raw(@item.Name)</h4>
        <span class="price">@item.Price.ToString("C")</span> 
    </div>
}

Это работает хорошо, и выводит необходимый HTML Тем не мение, Мне нужно обернуть каждый «ряд» из
<div class="ClearFix"></div> - в противном случае макет становится беспорядочным после нескольких строк.

(в моем случае строка составляет 5 делений продукта)

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 16 июля 2011
@foreach (var row in Model.Items.Select((item, index) => new { index, item }))
{
    if (row.index % 5 == 0)
    {
        <div class="ClearFix"></div>
    }
    <div class="product">
        <a class="hide" href="#">
            <img src="#" alt="Hide" />
        </a>
        <a href="#">
            <img src="#" width ="138" height="140" alt="product name" />
        </a>
        <h4 class="title">@Html.Raw(@row.item.Name)</h4>
        <span class="price">@row.item.Price.ToString("C")</span> 
    </div>
}
0 голосов
/ 19 июня 2013

Если вам действительно нужно обернуть содержимое в четкое исправление div ...

@{
   var grouping = new List<Item>();
   var itemsPerRow = 5;
   for (var i = 0; i < Model.Items.Count; i++)
   {
     var item = Model.Items[i];
     grouping.Add(item);
     if (i>0 && i%itemsPerRow == itemsPerRow-1)
     {
       <div class="clear-fix">
           @foreach (var thing in grouping)
           {
              Html.RenderPartial("_ItemPartial", thing);
            }
       </div>
       grouping.Clear();
     }         
    }
}

, а затем в _ItemPartial.cshtml:

@model Item
<div class="product">
    <a class="hide" href="#">
        <img src="#" alt="Hide" />
    </a><a href="#">
        <img src="#" width ="138" height="140" alt="product name" />
    </a>
    <h4 class="title">@Html.Raw(@Model.Name)</h4>
    <span class="price">@Model.Price.ToString("C")</span> 
</div>
0 голосов
/ 14 июля 2011

Разве простые int i и i % 5 == 0 and i > 5 не помогут?

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