我有一个关于在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"的引用更改为另一个字母,它仍然有效!有人能解释一下这里发生了什么吗?
谢谢
这是一个名为"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
| 归档时间: |
|
| 查看次数: |
4047 次 |
| 最近记录: |