我正在尝试理解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特有的东西
感谢。
答案 0 :(得分:0)
x =&gt; x.Name是一个匿名函数 - 它永远不会被执行。
事实上,Html帮助器将其转换为Expression<Func<TModel, TProperty>>
。这类似于anonymous functions in PHP或在JavaScript中传递函数(好吧,Func是,Expression包装并允许访问函数的执行树 - 基本上是关于函数本身的大量元数据)。
一旦进入html帮助器TextBoxFor
,就会有大量的额外处理和表达式树与模型元数据的比较。属性被考虑在内以及用于构建HTML的所有属性(如[必需]或[脚手架])
您的控制器不传入数据,但视图声明了强大的模型。
在视图中,@model PartyInvites.Models.GuestResponse
并不意味着实际传入任何数据。它只是将视图声明为强类型,并使模型元数据可用于Intellisense和视图编译器。与大多数PHP MVC框架(或基本的PHP包含)不同,Controller / View关系比简单的函数调用复杂得多。控制器传入的数据包含在Page和ViewData中,包含所有元数据和控制器上下文等。