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

Mat*_*t27 1 asp.net-mvc razor

我有一个关于在Visual Studio 2010中创建新的MVC 3项目(使用razor)时生成的默认帐户模型,视图和控制器的问题.生成的AccountController使用它来加载视图:

public ActionResult LogOn()
    {
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

相应的视图(LogOn.cshtml)包含如下代码:

@Html.LabelFor(m => m.UserName)
Run Code Online (Sandbox Code Playgroud)

我的问题是这个变量"m"定义在哪里?怎么知道这是指模型?没有模型传递给视图,但"m"仍然有效.如果我将所有对"m"的引用更改为另一个字母,它仍然有效!有人能解释一下这里发生了什么吗?

谢谢

Moh*_*lam 5

这是一个名为"Lambda Expression"的C#3.0功能.

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

http://blogs.msdn.com/b/ericwhite/archive/2006/10/03/lambda-expressions.aspx

http://blah.winsmarts.com/2006/05/19/demystifying-c-30--part-4-lambda-expressions.aspx

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

如果您在登录视图中检查第一行,您将找到以下行:

@model YOUR_APP_NAME.Models.LogOnModel
Run Code Online (Sandbox Code Playgroud)

其中定义了此视图的模型类型为logonModel类型.(可在Models文件夹中找到.)

这样,奇怪的m是代表传递的Logon模型,因此我们可以像输入一样轻松访问传递模型下的属性m.UserName