使用WebMatrix构建表

时间:2011-12-26 21:59:32

标签: razor webmatrix

我正在尝试使用WebMatrix(ASP.NET网页)构建HTML表格,但由于HTML标记的打开和关闭方式而遇到麻烦。

我想要实现的是从记录集创建一个包含三列的表,然后填入任何空列。

这是我用来解决如何使用WebMatrix执行此操作的一些测试代码。

<table>
@{
 int row = 0;
 int col = 0;
 for (int i = 0; i < 20; i++) //20 cells for test purposes
 {
  col++;
  if (col == 4)
  {
   col = 1;
  }
  if (col == 1)
  {
   row++;
   if (row != 1)
   {
    </tr>
   }
   <tr>
  }
  <td>@i</td>
 }
 for (int i = col; i <=3; i++)
 {
  <td>empty</td>
 }
 </tr>
}
</table>

有关如何最好地完成此任务的任何建议。

1 个答案:

答案 0 :(得分:4)

如何在打印数据集之前对其进行分组?它的ASP.NET MVC术语这称为视图模型。不幸的是,在WebMatrix中你没有可以完成准备这个视图模型的控制器,但是你可以在 codebehind 或Razor页面的任何部分调用它:

@{
    // group the dataset by 3 elements
    var data = Enumerable.Range(0, 20).GroupBy(x => x / 3);
}

<table>
@foreach (var group in data)
{
    <tr>
        @foreach (var item in group)
        {
            <td>@item</td>
        }
        @for (int i = 0; i < 3 - group.Count(); i++)
        {
            <td>empty</td> 
        }
    </tr>
}
</table>

如果你有一个复杂对象的数据集而不仅仅是整数,那么这就是分组的完成方式:

var dataset = Enumerable.Range(0, 20).Select(x => new { Text = "item " + x });
var data = dataset
    .Select((value, index) => new { Index = index / 3, Item = value })
    .GroupBy(pair => pair.Index);

然后:

<table>
@foreach (var group in data)
{
    <tr>
        @foreach (var element in group)
        {
            <td>@element.Item.Text</td>
        }
        @for (int i = 0; i < 3 - group.Count(); i++)
        {
            <td>empty</td> 
        }
    </tr>
}
</table>

它使代码更具可读性。正如您所看到的,视图模型的使用避免了您在视图中编写丑陋的意大利面条代码。

每次你有一些不匹配的标签,你需要在视图中做整数和模数除法和东西,你可能做错了,因为你没有选择正确的视图模型。