视图中的ASP.NET Razor Model语法

Bac*_*tnz 2 asp.net asp.net-mvc razor

这里有一些新手问题:

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

@model MyProj.Models.User
Run Code Online (Sandbox Code Playgroud)

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

1. @Html.DisplayNameFor(model => model.Email)
Run Code Online (Sandbox Code Playgroud)

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

2. users name is: @model.Name 
Run Code Online (Sandbox Code Playgroud)

为什么它使用大写的'M'?我们用小写字母命名吗?

3. users name is: Model.Name
Run Code Online (Sandbox Code Playgroud)

谢谢!

Jos*_*osh 6

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

DisplayNameFor以及所有其他*对于辅助方法正在服用的lambda表达式的参与能力优势表达式树.

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

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

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

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

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

@model是Razor对待的特殊指令.它就像一个保留的关键字,与classor 没有任何不同int.

为什么它使用大写的'M'?我们用小写字母命名吗?

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