使用MVC5的行跨度

时间:2017-03-17 03:47:26

标签: asp.net-mvc-5

                    @if (ViewData["post"] != null)
                    {

                        foreach (var item in ViewData["post"] as IEnumerable<Employee.Models.ApplyJob>)
                        {
                            <tr>
                                <td>@item.PerferenceNo</td>
                                <td>@item.JobName</td>
                                <td>@item.Location</td>
                                <td>Action</td>
                            </tr>
                        }
                    }

enter image description here

如何在 PerferenceNo JobName 上使用行范围,使用MVC4&gt;

1 个答案:

答案 0 :(得分:2)

您需要将以前的值与当前值进行比较,但不需要使用rowspan(这会使其不必要地复杂化)。当单元格与先前的值匹配时,您可以生成一个空的<td>元素。

@{
    var data = ViewData["post"] as IEnumerable<Employee.Models.ApplyJob>;
    int perferenceNo = 0;
    string jobName = "";
}
@foreach (var item in data)
    <tr>
        @if (item.PerferenceNo == perferenceNo)
        {
            <td></td>
        }
        else
        {
            perferenceNo = item.PerferenceNo;
            <td>@item.PerferenceNo</td>
        }
        ... // ditto for JobName 
        <td>@item.Location</td>
    </tr>
}

我强烈建议您将模型传递给视图,而不是从ViewData

中投射

如果您确实想使用rowspan属性,则代码需要

@foreach (var item in items)
{
    int perferenceNoCount = data.Count(x => x.PerferenceNo == item.PerferenceNo);
    int jobNameCount = data.Count(x => x.JobName == item.JobName);
    <tr>
        @if (item.PerferenceNo != perferenceNo)
        {
            perferenceNo = item.PerferenceNo;
            <td rowspan="@(perferenceNoCount)">@item.ID</td>
        }
        @if (item.JobName != jobName)
        {
            jobName = item.JobName;
            <td rowspan="@(jobNameCount)">@item.Name</td>
        }
        <td>@item.Location</td>
    </tr>
}

但是你真的应该在这种情况下使用视图模型和rowspan值的属性,并在控制器中运行你的查询。