如何使用 Razor View Engine 在 ASP.NET MVC5 中创建 html table

How to create html table in ASP.NET MVC5 using Razor View Engine

我需要创建一个 table,它看起来像:

     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

我不知道如何巧妙地修改这段代码以获得 headers。 我会在底部添加另一个 foreach 以这样创建 header 行:

<tr>
    <th></th>
    @foreach (var session in this.Model.Sessions)
    {
    <th>@Session.Id</th>
    }
</tr>

但我相信,还有其他更智能的解决方案可以实现这一目标。 任何帮助将不胜感激。

由于 HTML 表格是 row-by-row 呈现的,而不是逐列呈现,您必须遍历客户端,因此无法生成 header 行作为一部分这个循环。没有丑陋的黑客就是这样。因为您可能会在表示 header 行的列表中插入一个虚拟客户端,但这听起来真的很难看,我不建议这样做。

您提出的解决方案在会话中使用单独的 foreach 对我来说看起来非常好、最佳且可读。我会以完全相同的方式处理它。