[ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的ViewImports文件(06)

ASP.NET Core 作者: Rector 31阅读 0评论 0收藏 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

什么是ViewImports文件 ?

在ASP.NET Core Razor Pages(或者ASP.NET Core MVC)项目中,如果使用.NET自带的脚手架生成,默认在[/Pages/]目录(MVC项目在[/Views/])中会生成一个_ViewImports.cshtml文件,这个文件即是ViewImports文件,它是用来在Razor视图引擎中导入一些公共指令的文件。

ViewImports文件可以导入名称空间、添加标签帮助类的引用,或者执行依赖注入。如果一个指令会被项目中的多个视图文件使用,这时可以考虑在ViewImports文件中来导入。可以减少很多重复导入的代码。

_ViewImports.cshtml文件支持的指令有如下几种:

注意:_ViewImports.cshtml文件中,除了以上的指令外,不支持其他任何的Razor功能,比如functions或者sections等的定义。

以下是一个ViewImports文件的示例:

@using WebApplication1
@using WebApplication1.Models
@using WebApplication1.Models.AccountViewModels
@using WebApplication1.Models.ManageViewModels
@using Microsoft.AspNetCore.Identity
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

ViewImports文件的存放位置

默认情况下,_ViewImports.cshtml文件是放在[/Pages/]目录中的。

当然,_ViewImports.cshtml文件也可以放在任何文件夹中,在这种情况下,它将只应用于该文件夹及其子文件夹中的视图。

在Razor Pages应用程序中,_ViewImports.cshtml文件的个数没有做任何限制。因此,你可以在一个Razor Pages应用程序中创建多个_ViewImports.cshtml文件,并将它们分别放在不同的子文件夹。

但要特别注意的是:_ViewImports文件从根级别开始处理,然后对每个文件夹进行处理,直到指向视图本身的位置,因此在根级别指定的设置可能会被子文件夹级别的_ViewImports设置所重写和覆盖。

比如,如果根目录的_ViewImports.cshtml文件指定了@model@addTagHelper。其位于子文件夹中也指定了一个_ViewImports.cshtml文件并且指定了一个不同的@model和另一个@addTagHelper指令。那么,在这种情况下,视图将可以访问并使用这两个@addTagHelper导入的标签Tag Helper,对@model而言,前面导入的将被后面子文件夹ViewImports导入的所覆盖。

如果一个Razor Pages应用程序中有多个_ViewImports.cshtml文件,那么Razor视图引擎将会导入的指令进行合并或者覆盖,具体如下:

  • @addTagHelper,@removeTagHelper: 所有指令有效,并按导入的选择顺序调用
  • @tagHelperPrefix: 越靠近视图文件的有效,前面导入的将被覆盖
  • @model: 越靠近视图文件的有效,前面导入的将被覆盖
  • @inherits: 越靠近视图文件的有效,前面导入的将被覆盖
  • using: 所有的引用均会被导入,重复的将被忽略
  • inject: 对于每个属性,最接近视图的属性将覆盖具有相同属性名的任何其他属性

阅读了该文章的人还浏览了...

本文永久链接码友网 » [ASP.NET Core Razor Pages系列教程]ASP.NET Core Razor Pages中的ViewImports文件(06)

发布于: 2018-10-31 09:41:43
分享扩散: