@model 到底做了什么?

cha*_*hma 3 asp.net asp.net-mvc asp.net-core

每当我将@model [Type]其放在 Razor 页面顶部时,某些泛型类型和方法的类型参数都会解析为 [Type],例如:

string DisplayNameFor<TResult>(Expression<Func<TModel, TResult>> expression);
Run Code Online (Sandbox Code Playgroud)

变成

string DisplayNameFor<TResult>(Expression<Func<[Type], TResult>> expression);
Run Code Online (Sandbox Code Playgroud)

ASP.NET Core 如何实现这一目标?type参数如何TModel变成[Type]?

Tao*_*hou 5

@模型

@model指令指定传递给视图的模型的类型:

@model TypeNameOfModel
Run Code Online (Sandbox Code Playgroud)

在使用单个用户帐户创建的 ASP.NET Core MVC 应用程序中,Views/Account/Login.cshtml视图包含以下模型声明:

@model LoginViewModel
Run Code Online (Sandbox Code Playgroud)

生成的类继承自RazorPage<dynamic>

@model TypeNameOfModel
Run Code Online (Sandbox Code Playgroud)

Razor 公开了一个Model用于访问传递给视图的模型的属性:

<div>The Login Email: @Model.Email</div>
Run Code Online (Sandbox Code Playgroud)

@model指令指定该属性的类型。该指令指定T视图RazorPage<T>派生自的生成类。如果@model未指定该指令,则该Model属性的类型为dynamic。模型的值从控制器传递到视图。有关更多信息,请参阅强类型模型和 @model 关键字

参考:@model