2

ここにいくつかの初心者の質問:

強く型付けされたビューでは、その理由は次のとおりです。

@model MyProj.Models.User

なぜラムダを使用するのですか?それは正確に何をしますか?model.Emailだけではないのはなぜですか?

1. @Html.DisplayNameFor(model => model.Email)

なぜこれが機能しないのですか?変数モデルとは呼ばなかったのですか?(@html。()を使用する必要があることはわかっていますが、モデルが認識できないのはなぜですか?

2. users name is: @model.Name 

大文字の「M」で機能するのはなぜですか?小文字で名前を付けませんでしたか?

3. users name is: Model.Name

ありがとう!

4

1 に答える 1

6

なぜラムダを使用するのですか?それは正確に何をしますか?model.Emailだけではないのはなぜですか?

DisplayNameForおよび他のすべての* Forヘルパーメソッドは、ラムダ式が式ツリーに参加する機能を利用しています。

このラムダ式自体は、単にモデル型を取り込んで文字列を返すだけです。ただし、表示名を取得するために必要な情報は他にもあります。

擬似コードでは、そのメソッドは次のことを行っています。

1.)ラムダを
として扱います 2.)式を解析してプロパティの名前を取得します
3.)リフレクションを使用してそのプロパティのDisplayNameAttribute
を取得します 4.)値が存在する場合は抽出し、そうでない場合はの名前を使用しますプロパティ
5.)表示名またはプロパティ名のいずれかを使用して、そのプロパティのラベルを生成します

式ツリーを使用しないと、プロパティ名を文字列として渡す必要があります...そしてそれはひどいことです。これは、マジックストリングなしで反射を使用する強い型の方法を提供します。

なぜこれが機能しないのですか?変数モデルとは呼ばなかったのですか?(@html。()を使用する必要があることはわかっていますが、モデルが認識できないのはなぜですか?

@modelRazorによって異なる方法で処理される特別なディレクティブです。classこれは、またはと変わらない予約キーワードのようなものintです。

大文字の「M」で機能するのはなぜですか?小文字で名前を付けませんでしたか?

Model@modelは、ディレクティブを使用して定義したタイプを持つビューのプロパティであり、モデルを参照します。@modelディレクティブを使用しない場合、タイプは。になりdynamicます。

于 2012-08-10T00:31:34.803 に答える