Dal*_*e K 3 lambda strongly-typed-view asp.net-mvc-3
让我们走这条线:@Html.LabelFor(m => m.UserName)
这是在这一行的页面上:@model CurrencyMvc.Models.RegisterModel
我假设当页面视图呈现LabelFor时,会自动调用LabelFor并引用所描述的模型,并且Lambda函数告诉它如何从模型中获取所需的信息?
我不清楚为什么我们在传递实际值egmUsername时传递函数.
哦,当这个帮手叫"m"来自哪里?
有两个类用于剃刀页面(第二个派生自第一个):
System.Web.Mvc.WebViewPageSystem.Web.Mvc.WebViewPage<T>因此,当您通过指定模型使用强类型视图时,您的视图派生自泛型版本,Html属性是通用的HtmlHelper<TModel>.由于总是使用强类型视图是一个好习惯,因此我不再讨论第一类,因为它没有意义.
我们来看看LabelFor扩展方法的签名:
public static MvcHtmlString LabelFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
{
...
}
Run Code Online (Sandbox Code Playgroud)
从这个定义中可以看出,该LabelFor方法是一个带有HtmlHelper<TModel>1个参数的类的扩展方法.仅当您具有强类型视图时,此方法才可用.该参数表示一个lambda表达式,它仅限于成员访问表达式(如果您尝试使用某些奇特的东西,帮助程序将抛出异常).它将模型作为参数,并且必须返回此模型的属性.
由于这些信息,帮助程序能够确定正在指定的成员的名称,从而生成正确的标记.由于参数是一个lambda表达式,因此它也能够确定此属性的元数据(您可能已使用诸如[DisplayName]......之类的属性修饰了视图模型属性,允许您指定其他元数据).如果帮助者只按你要求的那样取了一个值:Html.LabelFor(Model.SomeValue)你明白在这个LabelFor方法里面你得到的就是这个值.您永远无法访问视图模型的元数据,这是ASP.NET MVC中的基本概念.
| 归档时间: |
|
| 查看次数: |
4927 次 |
| 最近记录: |