2013-03-12 72 views
1

我正在爲我的項目使用asp.net MVC 4,並且我有一個模型。 我正在使用Bootstrap Carousel爲我的索引頁顯示產品(請參閱下圖)C#在foreach中foreach,在每個項目中顯示3個項目。旋轉木馬

現在我的問題是:我想在每個幻燈片項目中顯示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 2013-03-13 02:49:27

2

一種方式來思考這個問題是原始集合分成組,每次3個時序元件。幸運的是,您可以使用「將元素索引除以3」作爲關鍵字的LINQ方法。國際海事組織,這種解決方案的優點是它表達更清楚你的意圖,並有更好的性能比在內部循環中重複收集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>和控制器進行分組。

相關問題