Asp.net mvc NET MVC如何知道如何使用lambda表达式呈现模型属性?

Asp.net mvc NET MVC如何知道如何使用lambda表达式呈现模型属性?,asp.net-mvc,razor,Asp.net Mvc,Razor,我有一个关于在VisualStudio2010中使用razor创建新的MVC3项目时生成的默认帐户模型、视图和控制器的问题。 生成的AccountController使用此命令加载视图: public ActionResult LogOn() { return View(); } 相应的view LogOn.cshtml包含如下代码: @Html.LabelFor(m => m.UserName) 我的问题是这个变量“m”是在哪里定义的?它如何知道这指的

我有一个关于在VisualStudio2010中使用razor创建新的MVC3项目时生成的默认帐户模型、视图和控制器的问题。 生成的AccountController使用此命令加载视图:

public ActionResult LogOn()
    {
        return View();
    }
相应的view LogOn.cshtml包含如下代码:

@Html.LabelFor(m => m.UserName)
我的问题是这个变量“m”是在哪里定义的?它如何知道这指的是模型?没有模型被传递到视图,但m仍然有效。如果我将所有对“m”的引用改为另一个字母,它仍然有效!有人能解释一下这是怎么回事吗


谢谢

这是一个名为Lambda Expression的C3.0特性

顺便说一句,你可以查看这些好文章来了解它是什么,它非常有用

对于问题的第二部分,如果您注意到,@Html下的所有方法都是与模型相关的方法,这意味着它们都希望在您传递的模型上工作

如果您选中登录视图中的第一行,您将发现这一行:

@model YOUR_APP_NAME.Models.LogOnModel
它定义此视图的模型类型为logonModel类型。可以在“模型”文件夹中找到


通过这种方式,奇怪的m表示传递的登录模型,因此我们可以像键入m.UserName一样轻松地访问传递模型下的属性。这是一个名为Lambda Expression的c3.0特性

顺便说一句,你可以查看这些好文章来了解它是什么,它非常有用

对于问题的第二部分,如果您注意到,@Html下的所有方法都是与模型相关的方法,这意味着它们都希望在您传递的模型上工作

如果您选中登录视图中的第一行,您将发现这一行:

@model YOUR_APP_NAME.Models.LogOnModel
它定义此视图的模型类型为logonModel类型。可以在“模型”文件夹中找到


通过这种方式,奇怪的m表示传递的登录模型,因此我们可以很容易地访问传递模型下的属性,就像在这种情况下键入m.UserName

如果变量名作为

从链接:

所有lambda表达式都使用lambda 运算符=>,按原样读取 到lambda的左侧 运算符指定输入 参数(如果有)和右侧 包含表达式或语句 块lambda表达式x=>x* x被读取x到x乘以x


在这种情况下,如果一个变量名是作为

从链接:

所有lambda表达式都使用lambda 运算符=>,按原样读取 到lambda的左侧 运算符指定输入 参数(如果有)和右侧 包含表达式或语句 块lambda表达式x=>x* x被读取x到x乘以x


Lambda表达式只是C委托的简写形式。委托是可以作为参数传递的函数,很像javascript函数和回调函数

x=>x.Name实际上只是创建其中一个委托的简写,它接受某个变量x作为参数,并返回这个变量Name属性

参数=>表达式 是的缩写

Function(parameters) {
    return expression;
}

因此,LabelFor将其中一个速记函数作为参数,并在您指定的模型上下文中运行它。

Lambda表达式只是速记C委托。委托是可以作为参数传递的函数,很像javascript函数和回调函数

x=>x.Name实际上只是创建其中一个委托的简写,它接受某个变量x作为参数,并返回这个变量Name属性

参数=>表达式 是的缩写

Function(parameters) {
    return expression;
}

所以LabelFor将这些速记函数中的一个作为参数,并根据您指定的模型上下文运行它。

好的,但是视图如何知道表达式的结果与模型相关?@Matt27因为您的视图将被编译为继承自System.Web.Mvc.ViewPage的类,其中T是您的模型类的类型。好的,但是视图如何知道表达式的结果与模型相关表达式与模型相关?@Matt27,因为您的视图将编译为从System.Web.Mvc.ViewPage继承的类,其中T是您的模型类的类型。感谢帮助和链接感谢帮助和链接