欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

程序员文章站 2022-07-02 13:26:37
之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view component. 可以认为view component是partial view的替代品。 我认为view component是 .net core中非常重要 ......

之前我们详细介绍过分布视图(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项目作为演示,如下一组图。

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

我们设置这么一个场景:

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

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

 

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

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

 

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

一、创建 view component 类:

创建viewcomponents 文件夹,在该文件夹下添加一个类 chartviewcomponent

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

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

添加如下方法:

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

 

二、创建 view component 视图

1、新建文件夹: views/shared/components ,约定大于配置,文件夹必须命名为components

2、新建文件夹: views/shared/components/chart ,约定大于配置,命名必须和之前的类chartviewcomponent去掉后缀后一样,即 chart

3、新建razor view: views/shared/components/chart/default.cshtml,约定大于配置,必须为default

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

添加如下代码:

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

三、调用 view component

最后我们打开 views/home/index.cshtml ,在最后面添加如下调用代码:

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

运行就能看到调用结果:

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

实用小贴士

一、直接通过controller调用调试

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

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

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

输入如下地址 xxx/home/indexvc

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

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

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

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

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

增加下图方框内容:

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

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

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

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

 MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

 

总结

一、我们不深入研究,从实用角度来说,可以把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}

 

祝 学习进步 :)

 

p.s. 系列文章列表: