优势
- 可使页面在不同的请求之间保持一致的用户体验
- 可减少视图中的重复代码
分类
按照约定,默认的布局名为_Layout.cshtml
- 基于页面的布局文件,Razor页面:Pages/Shared/_Layout.cshtml
- 基于视图控制器的布局文件:Views/Shared/_Layout.cshtml
默认布局
模板生成的MVC项目中,会默认生成布局视图,主要包括三部分:
- 引入公共的JavaScript脚本,CSS样式等资源文件
- 定义公共的Header,Footer,Left Navigation等用户页面元素
- 定义Content区域,通过
@RenderBody()
来提供Content占位符
【注】:默认情况下,每个布局必须调用RenderBody,无论在何处调用RenderBody,都会显示视图的内容。
指定视图
视图具有Layout属性,可以指定使用不同的布局视图,指定布局可以使用完整路径或部分名称
1 | // 完整路径:/Views/Shared/_Layout.cshtml 或 /Pages/Shared/_Layout.cshtml |
导入共享指令
视图和页面可以使用Razor指令来导入命名空间并使用依赖项注入,一般在文件_ViewImports.cshtml下。该文件支持以下指令:
- @addTagHelper
- @removeTagHelper
- @tagHelperPrefix
- @using
- @model
- @inherits
- @inject
- @namespace
【注】:该文件不支持函数和节定义等其它Razor功能
1 | // _ViewImports.cshtml默认内容如下 |
_ViewImports.cshtml文件一般放置在Pages/Views文件夹下,但其可以放置在任何文件夹中,在此情况下,该文件仅应用于当前文件夹及其子文件夹中的页面或视图。
如果在文件层次结构中找到多个_ViewImports.cshtml文件,则指令的组合行为如下所示:
- @addTagHelper/@removeTagHelper:按顺序全部运行
- @tagHelperPrefix:最接近视图的文件会替代任何其它文件
- @model:最接近视图的文件会替代任何其他文件
- @inherits:最接近视图的文件会替代任何其他文件
- @using:全部包括在内;忽略重复项
- @inject:针对每个属性,最接近视图的属性会替代具有相同属性名的任何其他属性
取消布局
在视图中,通过指定Layout属性可以取消或替换布局
1 | @{ |
取消布局后,所有的效果均会消失,包括CSS样式等。