什么是视图组件

视图组件与分部视图类似,但它们的功能更加强大。 视图组件不使用模型绑定,并且仅依赖调用时提供的数据。它也适用于 Razor 页。

视图组件:

  • 呈现一个区块而不是整个响应。
  • 包括控制器和视图间发现的相同关注点分离和可测试性优势。
  • 可以有参数和业务逻辑。
  • 通常从布局页调用。

视图组件可用于具有可重用呈现逻辑(对分部视图来说过于复杂)的任何位置,例如:

  • 动态导航菜单
  • 标记云(查询数据库的位置)
  • 登录面板
  • 购物车
  • 最近发布的文章
  • 典型博客上的边栏内容
  • 一个登录面板,呈现在每页上并显示注销或登录链接,具体取决于用户的登录状态

视图组件由两部分组成:类(通常派生自 ViewComponent)及其返回的结果(通常为视图)。

创建ViewCompont组件类

创建一个 ViewComponents 文件夹并添加以下 PriorityListViewComponent 类

  public class PriorityListViewComponent :  ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(int maxPriority, bool isDone)
{
var items = await GetItemsAsync(maxPriority, isDone);
return View(items);
}
private Task<List<TodoItem>> GetItemsAsync(int maxPriority, bool isDone)
{
return Task.Run<List<TodoItem>>(() =>
{ return new List<TodoItem>()
{
new TodoItem(){
Id=123,
Name="孙思邈",
Age=6,
Description="药王、妙应真人、孙十常、白山药王 "
},
new TodoItem(){
Id=456,
Name="孙思邈",
Age=7,
Description="药王、妙应真人、孙十常、白山药王 "
},
new TodoItem(){
Id=789,
Name="孙思邈",
Age=8,
Description="药王、妙应真人、孙十常、白山药王 "
},
new TodoItem(){
Id=12,
Name="孙思邈",
Age=9,
Description="药王、妙应真人、孙十常、白山药王"
}
};
});
}
}
    public class TodoItem
{
public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string Description { get; set; }
}

创建视图组件 Razor 视图

  • 创建 Views/Shared/Components 文件夹。 此文件夹 必须 命名为 Components
  • 创建 Views/Shared/Components/PriorityList 文件夹。 此文件夹名称必须与视图组件类的名称或类名去掉后缀(如果遵照约定并在类名中使用了“ViewComponent”后缀)的名称相匹配。 如果使用了 ViewComponent 属性,则类名称需要匹配指定的属性。
  • 创建 Views/Shared/Components/PriorityList/Default ... Razor view:
@model IEnumerable<TodoItem>

<h3>Priority Items</h3>
<ul>
@foreach (var todo in Model)
{
<li>@todo.Name</li>
}
</ul>

使用组件视图

在详情Index视图上,引用组件视图

<div>
@await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
</div>

效果图

ASP.NET Core 5.0 MVC 视图组件的用法的更多相关文章

  1. ASP.NET Core 2.0 MVC项目实战

    一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是 ...

  2. ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

    from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...

  3. asp.net core 3.0 MVC JSON 全局配置

    asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...

  4. [译]ASP.NET Core 2.0 部分视图

    问题 如何在ASP.NET Core 2.0中使用部分视图来重用页面的公共部分? 答案 新建一个空项目,在Startup中添加MVC服务和中间件: public void ConfigureServi ...

  5. asp.net Core 2.0 MVC为Controller或Action添加定制特性实现登录验证

    前言:最近在倒腾 微软的新平台 asp.net Core 2.0,在这个过程中有些东西还是存在差异.下面是我在学习过程的一点笔记.有不妥之处,望各位大虾指正! 一.先创建一个控制器继承于Control ...

  6. 打造静态分析器(二)基于Asp.Net Core 3.0的AspectCore组件检测

    上一篇,我们打造了一个简单的分析器,但是我们实际使用分析器就是为了对项目做分析检测,增加一些非语法的自检的 比如Asp.Net Core 3.0的替换依赖注入检测 设计分析 我们创建一个默认的Asp. ...

  7. 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入

    问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...

  8. ASP.NET Core 5.0 MVC中的 Razor 页面 介绍

    Razor 是一个用于将基于服务器的代码嵌入到网页中的标记语法. Razor语法由 Razor 标记.c # 和 HTML 组成. 通常包含 Razor 的文件的扩展名 cshtml Razor 语法 ...

  9. ASP.Net Core 5.0 MVC 配置文件读取,Startup 类中ConfigureServices 方法、Configure 方法的使用

    配置文件读取 1. 新建FirstController控制器 在appsettings文件内容替换成以下代码 { "Position": { "Title": ...

  10. ASP.NET Core 2.0 MVC 发布部署--------- ASP.NET Core 发布的具体操作

    ASP.NET Core 发布的具体操作 下面使用C# 编写的ASP.NET Core Web项目示例说明发布的全过程. 1.创建项目 选择“文件” > “新建” > “项目”. 在“添加 ...

随机推荐

  1. [ARC158D] Equation

    Problem Statement You are given a positive integer $n$, and a prime number $p$ at least $5$. Find a ...

  2. [ABC238G] Cubic?

    Problem Statement Given a sequence $A$ of $N$ numbers, answer the following $Q$ questions. In the $i ...

  3. C++学习笔记六:运算符(五种基本运算操作,优先级和结合性)

    这一章对操作符进行简单的总结: 1.五种基本运算类型:加减乘除,取余 add, substract, multiply, divide, modulus int number1{2}; int num ...

  4. 华企盾DSC由于半透明软件设置了需要管理员权限打开导致半透明打不开加密文件

    解决方法: 1.右键该应用程序->属性->兼容性,去掉[以管理员权限运行此程序] 2.也可以打开控制面板->系统和安全->用户账户控制设置调至最低

  5. MagicArray:像php一样,让Go业务代码不再卷!

    卷!一个字形容了当今码农行业的现状.一层一层的代码结构,一个一个dto,entity,vo,req,resp.这些对象越来越多,让码农们非常劳于奔命,加一个字段,改一个字段,影响面有多少.代码量也越来 ...

  6. CENTOS docker拉取私服镜像

    概述 docker的应用越来越多,安装部署越来越方便,批量自动化的镜像生成和发布都需要docker镜像的拉取. centos6版本太老,docker的使用过程中问题较多,centos7相对简单容易. ...

  7. Redis配置模式及各自优缺点

    大家好,我是闲者,今天简单聊下redis部署模式.Redis支持多种不同的数据结构和模式,以满足不同的使用场景.以下是一些常见的Redis配置和模式示例以及详解.原文地址:Redis配置模式及各自优缺 ...

  8. 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍

    前言:   在之前的项目中,我们已经使用 OpenVINOTM CSharp API 部署 PaddleOCR 全系列模型,但随着PaddleOCRv4版本发布以及OpenVINO CSharp AP ...

  9. Cesium渲染一帧中用到的图形技术

    译者注:本文翻译自Cesium官方博文<Graphics Tech in Cesium - Rendering a Frame>,May 14, 2015 by Patrick Cozzi ...

  10. 华为云河图KooMap:夯实数字孪生底座,点燃燎原星火

    摘要:7月8日,华为开发者大会2023(Cloud)华为云河图KooMap技术分论坛在东莞溪村顺利举办. 7月8日,华为开发者大会2023(Cloud)华为云河图KooMap技术分论坛在东莞溪村顺利举 ...