概述
在实际项目中,视图通常由可重用的组件构成。这些组件包括 Layout View(布局视图)、Content View(内容视图)和 Partial View(分部视图)。
本节将详细介绍 Layout View 和 Partial View 的概念,具体使用参考对应的 Lab。
Layout Views
有些 UI 元素是整个网站公用的,例如导航栏和页脚。布局视图的想法是我们创建一个包含这些常见 UI 元素的模板视图页面,并且在该模板内为内容视图留下一些空白区域。当开发人员添加视图时,可以重用布局视图,直接在布局视图中嵌入内容视图。
ASP.NET Core 布局视图的概念是:
RazorPage 类是所有视图的基类,它有一个
public string Layout {get;set;}
属性每次视图启动时,都会执行 ~\Views 文件夹中的 _ViewStart.cshtml。在该文件的代码中,你可以看到
@{ Layout = "_Layout"; }
,这句代码的意思是所有内容视图的默认布局视图是 _Layout.cshtml基于搜索视图的功能,Razor 引擎可以在 ~\Views\Shared 文件夹中找到 _Layout.cshtml 文件
_Layout.cshtml 文件中包含公用的 UI 元素代码。它们构成了完整视图的页面架构。你还可以在该布局视图中找到 @RenderBody() 和 @RenderSection():
@RenderBody() 是内容视图的占位符
@RenderSection() 用于呈现内容页面的可选部分。即内容页面可能包含此内容部分,也可能不包含
内容页面可以通过添加
@{Layout = ...}
来重写 _ViewStart.cshtml 中设置的 Layout 属性值
Partial Views
HTML Helper 帮助我们创建和重用 UI 组件。问题是超链接、文本框和下拉列表这些 UI 组件都不是面向业务逻辑的。那么有办法构建面向业务逻辑的 UI 组件吗?
假设你正在构建一个在线购物网站,可能需要设计一个购物车 UI 组件。购物车 UI 组件可以向用户显示所选商品、总价格、折扣信息等。因为商品的选择,总价计算和折扣计算都是业务逻辑聚焦的,所以购物车 UI 组件是一个面向业务逻辑的组件。
面向业务逻辑的 UI 组件还有一个更接地气的名字 —— 用户控件。
ASP.NET Core 中的用户控件或可重用的面向业务逻辑的 UI 组件称为分部视图。分部视图和内容视图基本没有区别,但通常分部视图被设计为可重用组件。而且,与在布局视图中使用 @RenderBody() 来呈现内容视图不同,我们使用 @Html.Partial() 来呈现分部视图。而且分部视图还可以有自己的 View Model(视图模型)。
Partial 方法的重载包括:
用于强类型视图模型:
public static IHtmlContent Partial(this IHtmlHelper htmlHelper, string partialViewName, object model);
用于弱类型视图模型:
public static IHtmlContent Partial(this IHtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
没有视图模型:
public static IHtmlContent Partial(this IHtmlHelper htmlHelper, string partialViewName);