不理解视图在ASP.NET中的工作方式



我正在努力理解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中。

相关内容

最新更新