2016-03-28 60 views
0

我想連續顯示3 Cells,然後爲剩餘單元動態創建行<tr>。當我搜索這個邏輯時,我得到了多篇關於使用modulo的文章的相同答案,它似乎適用於evryone,但我沒有得到期望的輸出。我在這裏錯過了什麼?無法在Razor中的表內循環內動態添加行

代碼:

<table> 
    @for (var i = 0; i < deliveryProvider.DeliveryTagInfo.DeliveryProviderTagList.Count; i++) 
    { 
     var deliveryTag = deliveryProvider.DeliveryTagInfo.DeliveryProviderTagList[i]; 

     if ((i%3) == 0) //Create new row for 4th item 
     { 
      @:<tr> 
     } 
     <td> 
      <div class="input-element checkbox"> 
       @Html.CheckBoxFor(x => x.DeliveryProviderList[j].DeliveryTagInfo.IsDeliveryTagSelectedList[i], new 
       { 
        name = deliveryTag, 
        id = deliveryTag 
       }) 
       <label for="@deliveryTag"> 
        <span></span>@deliveryTag</label> 
      </div> 
     </td> 
     if ((i%3) == 0) 
     { 
      @:</tr> 
     } 
    } 
</table> 

輸出:

enter image description here

預期輸出:

Test1 

ALCOHOL SPILLABLE COLD_BAG 

HOT_BAG HEAVY  SIZE 

Test2 

abc pqr xyz 

回答

0

一些問題的代碼是在你的結束標記。

if ((i%3) == 0) 
    { 
     @:</tr> 
    } 

在您的第一次迭代中,i%3是== 0,因此您在第一個語句中放置了結束標記。基本上你只是每三分之一創建<tr>標籤。

這裏是你如何能解決這個問題的例子:

var listCount = 11; 
for (var i = 0; i < listCount; i++) 
{ 
    if (i%3 == 0) 
    { 
     @:<tr> 
    } 

    //Add Checkboxes 

    //Closing Tag 
    if (((i+1) % 3 == 0)|| i == listCount - 1) 
    { 
     @:</tr>  
    } 
} 

關閉標籤的解釋...

對於關閉標籤的第一個條件:

(i+1) % 3 == 0) 

由於項目已添加,我們檢查是否是第三個 - 通過使用i + 1,我們將知道該行中有多少項 ,如果是,我們可以關閉它。

對於第二個條件:

i == listCount - 1 

我們還需要考慮,如果它是最後一個項目。例如,如果列表僅包含2個項目,我們仍然需要關閉該行。