【问题标题】:Razor View dynamic table rowsRazor 查看动态表行
【发布时间】:2012-03-01 04:43:28
【问题描述】:

我想在我的视图中有一个表格,它将把我的模型中的 3 个元素放在每一行中。所以我要这样做的方法是循环遍历模型并在 foreach 循环内部检查我设置的计数变量。如果 count 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>
}

也许有一种我没有想到的更简单的方法

【问题讨论】:

  • 请在您的视图中添加您当前使用的代码(sn-p)。

标签: c# html asp.net-mvc-3 razor html-table


【解决方案1】:

如何使用两个循环 - 这将使您的文档设置得更好,并使其更具可读性。此外,它还解决了行数不能被三整除时出现的问题:

<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 或数组

【讨论】:

  • 我不确定您在这里要做什么,但我认为如果您查看我的代码,您会发现我们似乎在谈论 2 个不同的事情
  • 不,我只是以一种非常不同的方式来处理它 - 我已经更新了我的代码以准确反映你想要做的事情。请注意,它假定 Model 是 IEnumerable 或数组。
  • 我喜欢这个解决方案。我在工作中开会,但有两件事。 1) 在图像标签中,它需要是 Model[i + j]。 2)整数除法不会截断余数吗?
  • 如果 Count = 28,i 将从 0 运行到 9,包括。所以我们有 10 行 (0 - 9),最后一行未满。
  • 我认为这个解决方案有问题。循环变量“i”对应于行,“j”对应于列。所以我想你应该写“for(int j = 0; j
【解决方案2】:
@{ 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>

【讨论】:

  • 您可能想稍微扩展您的答案,解释代码并使其对用户更有用
【解决方案3】:

@christian 解决方案对我有用。我不确定“trclose”和“tr”,因此在此处发布在剃刀视图中对我有用的解决方案。

<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>

【讨论】:

    【解决方案4】:

    看看这个,这应该对你有用!!!

    <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>
    

    【讨论】:

    • 我不确定整个建议,但 @Html.Raw() 为我解决了问题。
    【解决方案5】:

    也许这是您正在寻找的解决方案,对我有用

     @{ 
    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> 
    } 
    

    【讨论】:

      猜你喜欢
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2015-09-30
      • 2015-05-22
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多