2

这里有几个新手问题:

在强类型视图中,为什么:

@model MyProj.Models.User

为什么我们使用 lambdas: ?那究竟是做什么的?为什么不只是model.Email?

1. @Html.DisplayNameFor(model => model.Email)

为什么这不起作用?我们不是叫变量模型吗?(我知道我应该使用 @html.() 但为什么模型无法识别?

2. users name is: @model.Name 

为什么它适用于大写的“M”?我们不是用小写字母命名的吗?

3. users name is: Model.Name

谢谢!

4

1 回答 1

6

为什么我们使用 lambdas: ?那究竟是做什么的?为什么不只是model.Email?

DisplayNameFor以及所有其他*For 辅助方法正在利用 lambda 表达式参与表达式树的能力。

这个 lambda 表达式本身只是接受一个模型类型并返回一个字符串。但是需要更多信息来获取显示名称。

在伪代码中,该方法正在执行:

1.) 将 lambda 视为表达式
2.) 解析表达式以获取属性的名称
3.) 使用反射获取该属性的DisplayNameAttribute
4.) 如果值存在,则提取该值,否则使用名称属性
5.) 使用显示名称或属性名称为该属性生成标签

如果不使用表达式树,您最终将不得不将属性名称作为字符串传递......这很糟糕。这提供了一种使用反射的强类型方法,无需使用魔法字符串

为什么这不起作用?我们不是叫变量模型吗?(我知道我应该使用 @html.() 但为什么模型无法识别?

@model是 Razor 以不同方式处理的特殊指令class它就像一个保留关键字,与or没有任何不同int

为什么它适用于大写的“M”?我们不是用小写字母命名的吗?

Model是视图上的一个属性,它具有您使用@model指令定义的类型,并引用您的模型。如果不使用该@model指令,它将具有dynamic.

于 2012-08-10T00:31:34.803 回答