视图中的ASP.NET Razor Model语法

时间:2012-08-10 00:23:54

标签: asp.net asp.net-mvc razor

这里有一些新手问题:

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

@model MyProj.Models.User

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

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

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

2. users name is: @model.Name 

为什么它适用于大写' M&#39 ;?我们用小写字母命名它吗?

3. users name is: Model.Name

谢谢!

1 个答案:

答案 0 :(得分:6)

  

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

DisplayNameFor以及所有其他*For helper methods正在利用lambda表达式参与Expression Trees的能力。

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

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

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

为该属性生成标签

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

  

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

@modelspecial directive,Razor对此有不同的看法。它就像一个保留的关键字,与classint没有任何区别。

  

为什么它使用大写的'M'?我们没有用更低的名字命名   情况?

Model是视图中的属性,具有使用@model指令定义的类型,并引用您的模型。如果不使用@model指令,则其类型为dynamic