asp.net-mvc-3 – ASP.NET MVC强类型HTML帮助程序

让我们走这一行:@ Html.LabelFor(m => m.UserName)
这是在这一行的页面上:@model CurrencyMvc.Models.RegisterModel

我假设当页面视图呈现LabelFor时,会自动调用LabelFor并引用所描述的模型,并且Lambda函数告诉它如何从模型中获取所需的信息?

我不清楚为什么我们在传递实际值时传递函数,例如m.Username.

哦,当这个帮手叫“m”来自哪里?

解决方法

I assume that when the page view renders LabelFor is called
automatically with a reference to the model described,and that the
Lambda function tells it how to get the info it needs from the model?

我不完全确定我对这部分你的意思是什么,我想你的意思是@LabelForknows如何使用哪种型号?

是的,如果你看看这样的syntax

public static MvcHtmlString LabelFor<TModel,TValue>(
    this HtmlHelper<TModel> html,Expression<Func<TModel,TValue>> expression
)

您可以看到第一个参数以此开头,这使其成为一种扩展方法.当您添加行@model CurrencyMvc.Models.RegisterModel时,此HtmlHelper< TModel>成为您的RegisterModel.

Its not clear to me why we’re passing a function in when we could pass
the actual value e.g. m.Username.

大多数时候,“lambda表达式”仅仅是Func< T>.但是使用剃刀@Html.xfor(例如@Html.LabelFor),你传入一个Expression<Func<TModel,TValue>>,这是一个lambda表达式的树数据结构.用外行人的话说;一种未编译的Func.

如果您传入m.Username,则该方法只会包含“Dale Burrell”.但是,例如,html文本框生成为

<input type="text" name="Username" value="Dale Burrell">

如您所见,它实际上需要m.Username变量名

Oh and when this helper is called where does “m” come from?

那只是一个变量.就像foreach(数据集中的var m){}“m来自哪里?” – 你做了.您可以用任何东西替换m

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...