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

时间:2018-08-02 15:03:13

标签: asp.net asp.net-mvc razor razorengine

我需要创建一个如下表:

     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>

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

1 个答案:

答案 0 :(得分:1)

由于HTML表是逐行呈现的,而不是逐列呈现的,因此您必须遍历客户端,因此没有办法在此循环中生成标题行。没有丑陋的黑客。因为您可能会在列表中插入一个虚拟客户端来表示标题行,但这听起来确实很丑,所以我不建议您这样做。

您提出的带有单独foreach会话的解决方案对我来说看起来很好,最优化并且可读。我会以完全相同的方式处理它。