之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component, 可以认为view component是partial view的替代品。

我认为view component是 .net core中非常重要的一个功能,除了跟partial view类似的特征外,view component比较方便带参数和业务逻辑,一般通过layout page调用。一些典型的应用场景如动态导航菜单,登录框,购物车等。

一个 view component 由两部分组成:类(继承 ViewComponent)和 渲染视图

* 或者我们可以类比成微型的 controller和view

详细步骤

首先我们创建一个.net core 2.2项目作为演示,如下一组图。

我们设置这么一个场景:

传递不同参数,例如 柱状图、饼状图,返回不同的图形。

* 仅作演示,我们不返回真正的图形,用文字说明代替。

我们利用框架自带的首页(如下图)来演示。

我们前面说过,一个 view component 由两部分组成:类(继承 ViewComponent)和 渲染视图,我们先来创建这个类。

一、创建 view component 类:

创建ViewComponents 文件夹,在该文件夹下添加一个类 ChartViewComponent

注意:约定大于配置,这个类以 ViewComponent结尾 ,普通的view调用它时,会将这个后缀去掉。

添加如下方法:

二、创建 view component 视图

1、新建文件夹: Views/Shared/Components ,约定大于配置,文件夹必须命名为Components

2、新建文件夹: Views/Shared/Components/Chart ,约定大于配置,命名必须和之前的类ChartViewComponent去掉后缀后一样,即 Chart

3、新建Razor view: Views/Shared/Components/Chart/Default.cshtml,约定大于配置,必须为Default

添加如下代码:

三、调用 view component

最后我们打开 Views/Home/Index.cshtml ,在最后面添加如下调用代码:

运行就能看到调用结果:

实用小贴士

一、直接通过controller调用调试

view component 有一个很方便的地方是可以直接通过controller调用,这样就能单独显示,方便我们调试。

我们打开 HomeController,添加如下方法,修改下参数,返回5个饼状图。

输入如下地址 xxx/home/indexvc

二、同一个 view component, 根据不同条件返回多个视图

我们可以在view component 的类方法中根据不同条件返回不同视图。

1、如下图,将Default.cshtml复制一份,修改名称 AnotherChart.cshtml

增加下图方框内容:

2、修改类方法,增加如下判断:

通过 xxx/home/indexvc 来测试,发现已经跳转到另外一个视图:

总结

一、我们不深入研究,从实用角度来说,可以把view component 简单理解为微型的 controller和 view,注意两点区别:

1、view component 的view不能直接通过 http调用

2、view component 的类方法不与她自己的view 模型绑定。典型的使用方式是:

Controller –>

调用controller的view –>

传参数调用 view component 类方法InvokeAsync –>

调用 view component 的view

二、现在都推荐使用异步方法,同步的方法就不演示了,和之前的controller类似。

(* 本文中因为没访问数据库,实际上还是执行时还是同步)

三、view component 中 view的查找顺序,按照如下优先级

1、/Views/{Controller Name}/Components/{View Component Name}/{View Name}

2、/Views/Shared/Components/{View Component Name}/{View Name}

3、/Pages/Shared/Components/{View Component Name}/{View Name}

可以看到,也能单独为每个controller建Components的文件夹,不过一般来说我们都在Shared的文件夹下面建,就不另作说明了。

我们推荐view component的view 命名为 Default.cshtml , 使用路径为Views/Shared/Components/{View Component Name}/{View Name}

祝 学习进步 :)

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component的更多相关文章

  1. MVC + EFCore 完整教程19-- 最简方法读取json配置:自定义configuration读取配置文件

    问题引出 ASP.NET Core 默认将 Web.config移除了,将配置文件统一放在了 xxx.json 格式的文件中. 有Web.config时,我们需要读到配置文件时,一般是这样的: var ...

  2. EF5+MVC4系列(11)在主视图中用Html.RenderPartial调用分部视图(ViewDate传值);在主视图中按钮用ajax调用子action并在子action中使用return PartialView返回分布视图(return view ,return PartialView区别)

    一:主视图中使用Html.RenderPartial来调用子视图(注意,这里是直接调用子视图,而没有去调用子Action ) 在没有使用母版页的主视图中(也就是设置了layout为null的视图中), ...

  3. 开源题材征集 + MVC&EF Core 完整教程小结

    到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点. 下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目. 现向 ...

  4. MVC+EFCore 项目实战-数仓管理系统1

    项目背景及需求说明 这是一个数据管理"工具类"的系统,计划有三个核心功能: 1.通过界面配置相关连接字符串,查询数据库的表数据. 2.配置相关模板,生成数据库表. 可以界面填报或通 ...

  5. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  6. MVC5 + EF6 入门完整教程1

    https://www.cnblogs.com/miro/p/4030622.html 第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定& ...

  7. MVC5+EF6 入门完整教程

    MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用 MVC5+EF6 入门完整教程10:多对多关联表更新&使用原生SQL@20150521 MVC5+EF6 入门完整教程9:多表 ...

  8. MVC5+EF6 入门完整教程13 -- 动态生成多级菜单

    稍微有一定复杂性的系统,多级菜单都是一个必备组件. 本篇专题讲述如何生成动态多级菜单的通用做法. 我们不用任何第三方的组件,完全自己构建灵活通用的多级菜单. 需要达成的效果:容易复用,可以根据mode ...

  9. MVC5 + EF6 入门完整教程二

    从前端的UI开始 MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分. ASP.NET MVC抛弃了WebForm的一些特有的习惯,例如服务器端控件,Vie ...

随机推荐

  1. PHP发送邮件功能实现(使用163邮箱)

    第一步 我用的是163邮箱发送邮件,做一个尝试,在尝试之前,需要要开启163邮箱的授权码如图所示,请记住您的授权码,将在之后的步骤中用到 第二步 需要下载一个类PHPMailer,我有这个资源已经上传 ...

  2. CrashRpt_v.1.4.2_vs2008_also_ok

    1.windows多线程程序release版崩溃记录工具,便于该如何查找错误. 2.此工具主要用来配置windbug工具,一种排查程序发布版本崩溃这种非常难处理的缺陷的方法,非常棒,amazing! ...

  3. dpkg:处理 xxx (--configure)时出错解决方案

    出现问题如下: 正在设置 nfs-common (1:1.2.2-4ubuntu5) ... dpkg:处理 nfs-common (--configure)时出错:  子进程 已安装 post-in ...

  4. Tensorflow 又要升级了。Nvidia驱动升级,牵一发而动全身

    如题. 以前好好的,在宿主主机上,升级了下Linux的内核到4.15.0-13 Ubuntu16.04 以前的nvidia 驱动竟然也调了.用tensorflow 的GPU加速,必须使用nvidia ...

  5. java-mysql(3) 读写image

    在mysql里面用来存储图片有一个特殊的数据对象叫做 Blob(Binary Large Object). 数据库里面插入一张图片: 第一步:需要为图片创建一个文件对象 File img = new ...

  6. 云计算核心技术Docker的探索

    首先通过一个简单的场景来看一下为什么Docker这么火? 开发人员在开发的时候是有一套开发环境,包括运行的操作系统,依赖的服务比如WebLogic.Java,一些特定的配置,比如JVM大小.字符集,操 ...

  7. Spring事务原理一探

    概括来讲,事务是一个由有限操作集合组成的逻辑单元.事务操作包含两个目的,数据 一致以及操作隔离.数据一致是指事务提交时保证事务内的所有操作都成功完成,并且 更改永久生效:事务回滚时,保证能够恢复到事务 ...

  8. 老雷socket编程之认识常用协议

    老雷socket编程之常见网络协议 1.ip IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西, 它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求. ...

  9. Ember报错

    错误是ember-data的版本不对 解决办法是: npm install --save ember-data@2.14.2 //bing.com中去查资料,应有尽有

  10. 搭建本地pip源

    搭建本地的pip源 开发环境部署机器的时候, 每次从网上下载pip包会很慢, 将需要的包和相关依赖下载到本地, 搭建一个本地源服务器. 基本都是安装多个包, 推荐使用文件的方式, 文件内容格式, 可以 ...