-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 を構築するために使用されるすべてのもの ([必須] や [足場] など)

コントローラーはデータを渡しませんが、ビューは強力なモデルを宣言します。

ビューで@model PartyInvites.Models.GuestResponseは、データが実際に渡されることを意味するわけではありません。ビューを厳密に型指定されたものとして宣言し、モデルメタデータを Intellisense とビュー コンパイラで使用できるようにするだけです。コントローラー/ビューの関係は、ほとんどの PHP MVC フレームワーク (または基本的な PHP インクルード) とは異なり、単純な関数呼び出しよりもはるかに複雑です。コントローラーが渡すデータは、すべてのメタデータとコントローラー コンテキストなどと共に Page と ViewData にラップされます。

于 2013-08-01T20:59:06.373 に答える