我正在努力理解ASP.NET MVC4。
在HomeController中,我有一些代码似乎调用了一个视图。。。
public ViewResult RsvpForm()
{
return View();
}
这是观点。。。。
@model PartyInvites.Models.GuestResponse
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>RsvpForm</title>
</head>
<body>
<div>
@using (Html.BeginForm()) {
@Html.ValidationSummary()
<p>Your name: @Html.TextBoxFor(x => x.Name) </p>
<p>Your email: @Html.TextBoxFor(x => x.Email)</p>
<input type="submit" value="Submit RSVP" />
}
</div>
</body>
</html>
我不明白的是…
当我使用空参数调用视图时,视图为什么可以访问数据?
这是为了:@model PartyInvites.Models.GuestResponse
x => x.Name
发生了什么。我相信这是一个匿名函数,但我不明白它的必要性。我不知道x来自哪里(它没有出现在上面的代码中。它是全局函数还是其他函数?)。
为了帮助回答问题,我已经做了很多PHP和web方面的工作,并且我已经掌握了C#和Razor的大部分内容,所以我认为我只是太胖了,或者这对ASP 来说是特别的
谢谢。
x=>x。Name是一个匿名函数,从未执行过。
事实上,Html帮助程序将其强制转换为Expression<Func<TModel, TProperty>>
。这类似于PHP中的匿名函数或JavaScript中的传递函数(好吧,Func是,Expression封装了它,并允许访问函数的执行树——基本上是关于函数本身的大量元数据)。
一旦进入html助手TextBoxFor
,就需要对表达式树和模型元数据进行大量的额外处理和比较。属性被考虑在内,所有这些都被用来构建HTML(如[Required]或[Sffold])
控制器不传递数据,但视图声明了一个强模型。
在视图中,@model PartyInvites.Models.GuestResponse
并不意味着实际传入了任何数据。它只是将视图声明为强类型,并使Intellisense和视图编译器可以使用模型元数据。控制器/视图关系比简单的函数调用要复杂得多,这与大多数PHP MVC框架(或基本的PHP包含)不同。控制器传入的数据与所有元数据和控制器上下文等一起封装到Page和ViewData中。