2013-03-12 5 views
1

Я использую asp.net MVC 4 для моего проекта, и у меня есть модель. и я использую Bootstrap Carousel, чтобы показать продукты для моей страницы-индекса (см. Изображение ниже)C# foreach внутри foreach, дисплей 3 пункта в каждом элементе. carousel

Теперь мой вопрос: я хочу показать 3 продукта в каждом предметном элементе. Должен ли я писать ViewModel для этого?

<div class="carousel slide> 
    @for (int i = 0; i <= Model.Count()/3; i++) <!-- this works well, paging --> 
    { 
     <div class="item @if(i==0){<text>active</text>}"> 
     @foreach(var well in Model) 
     { 
      <div class="span4"> 
       <!-- some html here --> 
      </div> 
     } 
     </div> 
    } 
</div> 

carousel

ответ

6

Ваш внутренний foreach итерация по всей Model коллекции - вам нужно ограничить его только соответствующие три пункта.

Я предполагаю, что Вы хотите что-то вроде:

<div class="carousel slide> 
    @for (int i = 0; i <= Model.Count()/3; i++) <!-- this works well, paging --> 
    { 
     <div class="item @if(i==0){<text>active</text>}"> 
     @foreach(var well in Model.Skip(i*3).Take(3)) 
     { 
      <div class="span4"> 
       <!-- some html here --> 
      </div> 
     } 
     </div> 
    } 
</div> 
+0

Спасибо, Сэм, ты спас мою жизнь ... и ты догадываешься правильно. он отлично работает! .... – Rehmetjan

2

Один способ думать об этом проблема заключается в разделении исходной коллекции на группы для каждого из 3-х последовательных элементов. К счастью, вы можете использовать метод LINQ GroupBy, используя ключ «element index, разделенный на 3». ИМО, преимущество этого решения заключается в том, что он более четко выражает ваши намерения и имеет лучшую производительность, чем повторение коллекции с Skip(x * 3).Take(3) во внутреннем цикле.

<div class="carousel slide> 
    @foreach (var group in Model.Select((x, index) => new { element = x, index }).GroupBy(x => x.index/3, x => x.element)) 
    { 
     <div class="item @if(group.Key == 0) {<text>active</text>}"> 
     @foreach(var well in group) 
     { 
      <div class="span4"> 
       <!-- some html here --> 
      </div> 
     } 
     </div> 
    } 
</div> 

Я бы даже изменить тип модели, чтобы ILookup<int, TElement> и выполнять группировку в контроллере.