-1

我正在尝试了解 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 来说很特别

谢谢。

4

1 回答 1

0

x => x.Name 是一个匿名函数 - 它从未执行过。

实际上,Html 助手将其转换为Expression<Func<TModel, TProperty>>. 这类似于PHP 中的匿名函数或 JavaScript 中的传递函数(嗯,Func 是,Expression 包装了它并允许访问函数的执行树 - 基本上是关于函数本身的大量元数据)。

一旦进入 html 帮助程序,TextBoxFor就会有大量额外的处理和表达式树与模型元数据的比较。属性被考虑在内,所有用于构建 HTML 的东西(如 [Required] 或 [Scaffold])

您的控制器不传递数据,但视图声明了一个强模型。

在视图中,@model PartyInvites.Models.GuestResponse并不意味着实际传入任何数据。它只是将视图声明为强类型,并使模型元数据可用于 Intellisense 和视图编译器。与大多数 PHP MVC 框架(或基本的 PHP 包括)不同,Controller/View 关系比简单的函数调用要复杂得多。控制器传入的数据与所有元数据和控制器上下文等一起被包装到 Page 和 ViewData 中。

于 2013-08-01T20:59:06.373 回答