如何在没有javascript的MVC-Razor中使用rowspan?

Mar*_*ues 2 html-table razor asp.net-mvc-3

如何在Razor视图中使用rowspan合并表格中的单元格?

  • 不使用javascript/jQuery.
  • 表的源是一个IEnumerable.
  • 源中的某些项目在某个字段中具有相同的值,而这些项目是我们要在一个单元格中合并的项目.
  • 我们不知道给定值重复多少次.

生成的HTML应该是这样的:

<table>
    <tr>
        <td rowspan="2">Column 1 row 1</td>
        <td>Column 2 row 1</td>
    </tr>
    <tr>
        <td>Column 2 row 2</td>
    </tr>
    <tr>
        <td rowspan="3">Column 1 row 3</td>
        <td>Column 2 row 3</td>
    </tr>
    <tr>
        <td>Column 2 row 4</td>
    </tr>
    <tr>
        <td>Column 2 row 5</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

编辑以添加数据源和所需结果:

数据源可能类似于带有类别的产品.例如:

分类

  • 电子产品
  • 杂货

制品

  • 手提电脑(电子)
  • iPod(电子)
  • 电视(电子)
  • 咖啡(杂货)
  • 饼干(杂货)

结果

????????????????????????
? Electronics ? Laptop ?
?             ? iPod   ?
?             ? TV     ?
????????????????????????
? Groceries   ? Coffee ?
?             ? Cookies? 
????????????????????????
Run Code Online (Sandbox Code Playgroud)

我想到的唯一方法是使用Linq来计算列表中值的次数,但我想知道某人是否有更好的解决方案.谢谢!

Art*_*iom 6

尝试这样的事情.

<table>
    <tr>
        <th>Movie</th>
        <th>Person</th>
    </tr>

    @foreach (var byMovies in elements.GroupBy(x => x.Movie)
                                      .OrderBy(movie => movie.Key.Name))
    {
        var secondRowOrHigher = false;
        @:<tr>
        @:<td rowspan="@byMovies.Count()">@byMovies.Key.Name</td>

        foreach (var ticket in byMovies.OrderBy(x => x.Person.Name))
        {
            if (secondRowOrHigher)
            {
                @:<tr>
            }
            secondRowOrHigher = true;

            <td>@ticket.Person.Name</td>
            @:</tr>
        }
    }
</table>
Run Code Online (Sandbox Code Playgroud)

和课只是为了拍照

public class TicketInfo
{
    public Movie Movie { get; set; }
    public Person Person { get; set; }
}

public class Person
{
    public string Name { get; set; }
}

public class Movie
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)