我正在尝试使用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>
有关如何最好地完成此任务的任何建议。
答案 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>
它使代码更具可读性。正如您所看到的,视图模型的使用避免了您在视图中编写丑陋的意大利面条代码。
每次你有一些不匹配的标签,你需要在视图中做整数和模数除法和东西,你可能做错了,因为你没有选择正确的视图模型。