不明白视图如何在ASP.NET中工作

时间:2013-08-01 20:00:50

标签: asp.net-mvc-4

我正在尝试理解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特有的东西

感谢。

1 个答案:

答案 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中,包含所有元数据和控制器上下文等。