2012-02-08 20 views
5

我想在我的视图中有一张表格,它将在每行中放入来自我的模型的3个元素。所以我要这样做的方式是循环遍历模型,并在foreach循环内部检查我设置的计数变量。如果计数mod 3 == 0我会做类似</tr><tr>的开始新行。这不是我想要的方式,因为我会在<tr>之后有}。所以基本上我的问题是,我将如何创建一个基于模型中的每个行有3个项目的元素的剃刀视图内的动态表?Razor查看动态表格行

@{ 
int count = 0; 
<div> 
<table> 
<tr> 
@foreach (var drawing in Model) 
{ 
    <td style="width:240px;margin-left:30px; margin-right:30px;"> 
    <img src="@Url.Action("GetImage", "Home", new { id = drawing.drw_ID })" alt="drawing" /> 
    </td> 
    count++; 
    if(count%3==0) 
    { 
     </tr> 
     <tr> 
    } 
} 
</tr> 
</table> 
</div> 
} 

也许有这样做的更简单的方法,我没有想到的

+1

请添加你目前正在使用视图中的代码(段)。 – 2012-02-08 17:39:35

回答

11

如何使用两个循环 - 这会让你的文件进行设置更加精美,让它多一点可读性。此外,它需要而发生的,如果行的数量是不能被3除尽的问题护理:

<div> 
<table> 
@for(int i = 0; i <= (Model.Count - 1)/3; ++i) { 
    <tr> 
    for(int j = 0; j < 3 && i + j < Model.Count; ++j) { 
    <td style="width:240px;margin-left:30px; margin-right:30px;"> 
     <img src="@Url.Action("GetImage", "Home", new { id = Model[i + j].drw_ID })" alt="drawing" /> 
    </td> 
    } 
    </tr> 
} 
</table> 
</div> 

编辑,以反映您粘贴代码。请注意,这个假设的模型实现IList或数组

+0

我不确定你在这里试图做什么,但我认为如果你看看我的代码,你会看到我们似乎在谈论两件不同的事情 – esastincy 2012-02-08 17:54:16

+0

不,我只是以一种截然不同的方式 - 我已更新我的代码,以准确反映您要做的事情。请注意,它假定Model是一个IEnumerable或数组。 – eouw0o83hf 2012-02-08 18:02:10

+1

我喜欢这个解决方案。我在工作中会议,但有两件事。 1)在图片标签中,它需要是Model [i + j]。 2)Wont整数除法只是截断余数? – esastincy 2012-02-08 18:08:41

7

梅比这就是你正在寻找工作的解决方案,我

@{ 
int count = 0; 
** 
var tr = new HtmlString("<tr>"); 
var trclose = new HtmlString("</tr>"); 
** 
<div> 
<table> 
<tr> 
@foreach (var drawing in Model) 
{ 
    <td style="width:240px;margin-left:30px; margin-right:30px;"> 
    <img src="@Url.Action("GetImage", "Home", new { id = drawing.drw_ID })" alt="drawing" /> 
    </td> 
    count++; 

    if(count%3==0) 
    { 
    ** 
    trclose 
    tr 
    ** 
    } 
} 
</tr> 
</table> 
</div> 
} 
+0

这对我有用 – Sandeep 2016-02-24 22:41:49

2

检查了这一点,这应该为你工作!

<h2>Index</h2> 
<table> 
    <tr> 
     @{ 
      var index = 0; 
     } 

     @foreach (int num in Model) 
     { 
      if ((index % 10) == 0) 
      { 
      @Html.Raw("</tr>"); 
      @Html.Raw("<tr>"); 


      } 
      <td> 
       <h2>@num</h2> 
      </td> 
      index++; 
     } 
    </tr> 
</table> 
+0

我不确定整个建议,但@ Html.Raw()为我做了诀窍 – azarc3 2015-09-27 21:32:40

0

的@christian解决方案为我,我不知道“trclose”和“TR”,因此在这里张贴在Razor视图为我工作的解决方案。

<table> 
     <tr><td><input type="checkbox" id="chkAssetCategories" />&nbsp;SELECT ALL</td></tr> 
     <tr> 
     @{ 
      var count=0; 
      foreach (var item in Model.AssetCategories) 
       { 
        <td><input type="checkbox" class = "Catgories" id='@item.ID' value ='@item.ID' /><label>@item.Name</label></td> 
        if (count%5 == 0) 
        { 
         @:</tr><tr> 
        } 
        count++; 
       } 
     } 
     </table> 
0
@{ int counter = 0;} 
<div> 
    <table> 
     @for(int i = 0; i <= (Model.Count - 1)/3; ++i) { 
      <tr> 
       for(int j = 0; j < 3; ++j) { 
         <td style="width:240px;margin-left:30px; margin-right:30px;"> 
          @Model[counter] 
         </td> 
         counter++; 
       } 
      </tr> 
     } 
    </table> 
</div> 
+0

你可能想要扩展在你的答案上,解释一下代码并使其对用户更有用 – Draken 2016-05-02 08:29:51