学习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运行应用,并且点击“关于”页面。 表格中会显示每个出版社的书籍计数。

 

 

目录
相关文章
|
7天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
7天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
21 3
|
29天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
2月前
|
开发框架 监控 .NET
开发者的革新利器:ASP.NET Core实战指南,构建未来Web应用的高效之道
【8月更文挑战第28天】本文探讨了如何利用ASP.NET Core构建高效、可扩展的Web应用。ASP.NET Core是一个开源、跨平台的框架,具有依赖注入、配置管理等特性。文章详细介绍了项目结构规划、依赖注入配置、中间件使用及性能优化方法,并讨论了安全性、可扩展性以及容器化的重要性。通过这些技术要点,开发者能够快速构建出符合现代Web应用需求的应用程序。
35 0
|
2月前
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
63 0
|
2月前
|
开发框架 监控 .NET
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
【Azure 应用程序见解】在Docker中运行的ASP.NET Core应用如何开启Application Insights的Profiler Trace呢?
|
2月前
|
Linux C# C++
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
|
29天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
28 7
|
27天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
38 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
36 0

相关实验场景

更多
下一篇
无影云桌面