介绍
在 ASP.NET Core 中, 我们使用 View(视图)渲染数据。视图渲染后返回 HTML 内容。被视图所渲染的数据称为 View Model(视图模型)。在本节中, 我们将学习强类型视图模型和两种弱类型视图模型。
强类型视图模型
如果没有明确说明,当我们提到视图模型时说的都是强类型视图模型。在设计视图时, 可以通过设置视图的 Model 属性为其指定视图模型类型。运行时,Model 属性的值是视图模型类型的实例,它就是实际的视图模型。
下面代码中,我们将视图的视图模型设置为我们上一节创建的 Actor 类,并在 HTML table 中渲染它的数据。
ASP.NET Core 的视图引擎名为 Razor,具体的 Razor 语法我们将在第四单元再讨论。
@model HelloMVC.Models.Actor
<html>
<head>
<title>Actor Detail</title>
</head>
<body>
<h2>Actor Detail</h2>
<table border="1">
<tr>
<td>ID</td>
<td>@Model.ActorID</td>
</tr>
<tr>
<td>Name</td>
<td>@($"{Model.FirstName} {Model.LastName}")</td>
</tr>
</table>
</body>
</html>
@model HelloMVC.Models.Actor
表示将视图的 Model 属性的类型设置为 HelloMVC.Models 命名空间中的 Actor 类。视图的整体架构是使用 HTML 创建的,可以直接从前端设计好的静态页面复制过来。
由于视图类只有一个 Model 属性,因此每个视图最多只能有一个强类型视图模型。因此,如果想在单个页面上显示多个对象,就必须创建复合视图模型。
例如,如果你想要显示导演的信息以及 ta 指导的所有电影,你可能就需要设计如下复合视图模型:
public class DirectorFilmsViewModel
{
public Director Director { get; set; }
public IList<Film> Films { get; set; }
}
总结一下,在使用强类型视图模型时:
如果视图只需渲染领域模型对象,我们可以使用领域模型类作为视图模型类
如果视图需渲染多个对象,我们必须为视图创建复合视图模型类
弱类型视图模型
对于某些杂项信息,通常不值得为它们专门创建强类型视图模型类。例如,显式在