学习ASP.NET Core Razor 编程系列十七——分组

简介: 原文:学习ASP.NET Core Razor 编程系列十七——分组学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体  学习ASP.
原文: 学习ASP.NET Core Razor 编程系列十七——分组

学习ASP.NET Core Razor 编程系列目录

学习ASP.NET Core Razor 编程系列一

学习ASP.NET Core Razor 编程系列二——添加一个实体

 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面

学习ASP.NET Core Razor 编程系列六——数据库初始化

学习ASP.NET Core Razor 编程系列七——修改列表页面

学习ASP.NET Core Razor 编程系列八——并发处理

学习ASP.NET Core Razor 编程系列九——增加查询功能

 学习ASP.NET Core Razor 编程系列十——添加新字段

学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库

学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

学习ASP.NET Core Razor 编程系列十四——文件上传功能(二)

学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)

学习ASP.NET Core Razor 编程系列十六——排序

 

    在本教程中,我们来学习如何进行分组。

    通过前面的教程学习,你可以实现一个简单的书籍管理系统。 在本教程将学习如何创建具有简单分组功能的页面。

一、创建About页面来显示书籍统计信息

    在 书籍管理系统的“关于”页上,将显示每个出版社有多少书籍。 这要求在分组上再进行分组和简单计算。 要完成此操作,需要执行以下操作:

  • 创建一个视图模型类,该视图类是需要传递到该视图的数据的抽象。
  • 修改关于视图。

二、 创建视图模型

  1. 在Visual Studio 2017的解决方案资源管理器的Model文件夹中创建ViewModels文件夹。

 

       2. 在新的文件夹中,添加EnrollmentPublishGroup.cs类文件,并且写下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; 

namespace RazorMvcBooks.Models.ViewModels
{

    public class EnrollmentPublishGroup
    {
        public string Publish { get; set; }
        public int BooksCount { get; set; } 

    }
}

三、更新“About”页面模型

    在Visual Studio 2017的解决方案资源管理器的,找到 Pages/About.cshtml.cs 文件,并且修改代码如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorMvcBooks.Models.ViewModels; 

namespace RazorMvcBooks.Pages
{

    public class AboutModel : PageModel
    {

        public string Message { get; set; }

        public async Task OnGetAsync()
        {
            Message = "Your application description page."; 

            IQueryable<EnrollmentPublishGroup> data =
                from book in _context.Book
                group book by book.Publishing into publishGroup

                select new EnrollmentPublishGroup()
                {

                    Publish = publishGroup.Key,
                    BooksCount = publishGroup.Count()

                }; 

            BookGroup =  await data.AsNoTracking().ToListAsync();

        }
        private readonly RazorMvcBooks.Models.BookContext _context;

        public AboutModel(RazorMvcBooks.Models.BookContext context)

        {
            _context = context;
        } 

        public IList<EnrollmentPublishGroup> BookGroup { get; set; }
    }

}

 

    LINQ 语句按出版社对书籍实体进行分组,计算每组中实体的数量,并将结果存储在 EnrollmentPublishGroup 视图模型对象的集合中。

    注意:EF Core 当前不支持 LINQ group 命令。 在上述代码中,所有学生记录均从 SQL Server 返回。 group 命令应用于 Razor 页面应用,而不是应用于 SQL Server。 EF Core 2.1 支持此 LINQ group 运算符,并在 SQL Server 上进行分组。

四、修改“About”Razor 页面

    在Visual Studio 2017的解决方案资源管理器的找到 Pages/About.cshtml 文件中的代码替换为以下代码:

@page
@model AboutModel
@{
    ViewData["Title"] = "书籍统计信息";
}

<h2>@ViewData["Title"]</h2>
<h3>@Model.Message</h3> 

<p>Use this area to provide additional information.</p> 

<h2>书籍统计信息</h2>

<table>
    <tr>
        <th>
            出版社

        </th>
        <th>
            书籍数量

        </th>
    </tr> 

    @foreach (var item in Model.BookGroup)
    {

        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Publish)

            </td>
             <td align="right">

                @item.BooksCount
            </td>

        </tr>
    }
</table>

五、运行结果

    在Visual Studio 2017的中按F5运行应用,并且点击“关于”页面。 表格中会显示每个出版社的书籍计数。

 

 

目录
相关文章
|
14天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
71 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
1月前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
61 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
33 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
2月前
|
机器学习/深度学习 存储 编解码
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
多任务学习新篇章 | EMA-Net利用Cross-Task Affinity实现参数高效的高性能预测
42 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5

相关实验场景

更多