我需要创建一个如下表:
S1 S2 S3 S4 S5
C1 C1S1 C1S2 C1S3 C1S4 C1S5
C2 C2S1 C2S2 C2S3 C2S4 C2S5
C3 C3S1 C3S2 C3S3 C2S4 C3S5
C4 C4S1 C4S2 C4S3 C3S4 C4S5
C5 C5S1 C5S2 C5S3 C4S4 C5S5
但以下代码:
<table>
@foreach (var client in this.Model.Clients)
{
<tr>
<td >@client.Name</td>
@foreach (var session in this.Model.Sessions)
{
foreach (var data in this.Model.ClientSessions)
{
if (data.ClientId== client.ClientId&& data.SessionId == session.SessionId)
{
<td>@data.TotalClientSessions</td>
}
}
}
</tr>
}
</table>
产生:
//here should be missing header
C1 C1S1 C1S2 C1S3 C1S4 C1S5
C2 C2S1 C2S2 C2S3 C2S4 C2S5
C3 C3S1 C3S2 C3S3 C2S4 C3S5
C4 C4S1 C4S2 C4S3 C3S4 C4S5
C5 C5S1 C5S2 C5S3 C4S4 C5S5
我不知道如何巧妙地修改此代码以获取标头。 我将在底部添加另一个foreach以这种方式创建标题行:
<tr>
<th></th>
@foreach (var session in this.Model.Sessions)
{
<th>@Session.Id</th>
}
</tr>
但是我相信,还有其他更智能的解决方案可以实现这一目标。 任何帮助将不胜感激。
答案 0 :(得分:1)
由于HTML表是逐行呈现的,而不是逐列呈现的,因此您必须遍历客户端,因此没有办法在此循环中生成标题行。没有丑陋的黑客。因为您可能会在列表中插入一个虚拟客户端来表示标题行,但这听起来确实很丑,所以我不建议您这样做。
您提出的带有单独foreach会话的解决方案对我来说看起来很好,最优化并且可读。我会以完全相同的方式处理它。