如何在ASP.NET MVC视图中对数据进行分组?

8 浏览
0 Comments

如何在ASP.NET MVC视图中对数据进行分组?

在像Crystal Reports这样的报表工具中,有多种方法可以将非规范化的数据按照数据中的特定列进行分组,为指定列中的每个唯一项创建行标题。

如果我有以下数据:

Category1    Data1
Category1    Data2
Category1    Data3
Category2    Data4
Category2    Data5
Category2    Data6

报表软件将按照以下方式进行分组:

Category1
      Data1
      Data2
      Date3
Category2
      Data4
      Data5
      Data6

在ASP.NET MVC视图中有没有办法做到这一点,也许可以使用简单的linq语句或linq扩展方法结合foreach或嵌套的foreach来实现?

0
0 Comments

问题的原因是在ASP.NET MVC视图中如何对数据进行分组。解决方法是使用LINQ的GroupBy扩展方法,并嵌套使用foreach循环。以下是解决方法的代码示例:

    <% foreach (var group in Model.GroupBy(item => item.Category)) { %>
  • <%= Html.Encode(group.Key) %>
      <% foreach (var item in group) { %>
    • <%= Html.Encode(item.Data) %>
    • <% } %>
  • <% } %>

这段代码会生成与原问题中格式化列表类似的输出。它假设你的模型类似于以下内容:

public class ViewModel
{
    public string Category { get; set; }
    public string Data { get; set; }
}

但是,如何将数据提交给控制器呢?实际上,我得到的结果是null。

0
0 Comments

在ASP.NET MVC视图中,如果要按照某个属性对数据进行分组,可以使用GroupBy方法来实现。上述代码片段中,通过GroupBy方法将Model中的数据按照PlanName属性进行了分组。

在代码中,首先定义一个table标签,并设置了一些CSS类以美化表格的样式。然后使用foreach循环遍历Model.GroupBy(p => p.PlanName)的结果,这样就将数据按照PlanName属性分组了。

在循环的每次迭代中,先定义了一个thead标签,并在其中定义了一个tr标签,用于显示每个分组的名称。在这个tr标签中,使用了.Key来获取当前分组的名称。

接下来,定义了一个tbody标签,在其中再次使用foreach循环遍历当前分组的数据。在循环的每次迭代中,定义了一个tr标签,并在其中显示了PlanDetails和PlanOption属性的值。

最后,定义了一个tfoot标签,用于显示表格的脚注信息。

通过上述代码,可以实现按照PlanName属性将数据分组,并在视图中显示分组名称和对应的数据。

解决方法:

- 使用GroupBy方法将数据按照指定属性进行分组。

- 使用foreach循环遍历每个分组的数据。

- 在循环的每次迭代中,使用.Key获取当前分组的名称。

- 在视图中显示分组名称和对应的数据。

0