2011-07-20 14 views
2

このMVCスキャフォールドコードでは、テンプレートが使用されていることを理解しています。独自のテンプレートを定義できます。 また、ビューに送信されたオブジェクトのデータ注釈も考慮されています。MVCデータの注釈とテンプレート

しかし、modelItemとは何ですか?あなたの例では

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ReferenceNum) 
     </td> 

答えて

1

、Html.DisplayForのためのパラメータは、ラムダ式である:modelItem与え、あなたはmodelItem.ReferenceNumプロパティを参照してください。 modelItemはModelと同じ型です。

備考:modelItem => modelItem.ReferenceNumとなります。そうでなければ:item => item.ReferenceNum。

1

短いawnserはModelであり、DisplayForに送信されたラムダの引数modelitemは同じオブジェクトです。

Htmlは、この場合はビュークラスのHtmlHelperのプロパティです。この場合のTは、ビューに渡したビューの状態のタイプです。

このビューは、あなたが注目したように、Modelプロパティでビューステートを公開します。同じ値を持つHtmlHelperを持つHtmlプロパティもインスタンス化されているため、Htmlプロパティを使用すると、実際には同じ値が指定したラムダに再び渡されます。

ここでは、名前modelItemはあなたのラムダの名前です。何でもかまいません。

2

modelitemは、使用されていないバックグラウンド変数です。

DisplayForは、単一のパラメータを受け取るメソッドが必要です。 このメソッドの実装は、実際にはラムダ式の右側であるitem.[SOMETHING]です。 item.[SOMETHING]は完全に無視されます。modelitem itemModelに属しており、匿名メソッド{ item.[SOMETHING] }を呼び出すときに作成されたオブジェクトではないため、modelitemitemに置き換えると、コンパイルエラーが発生します。

だからこそ、modelitemは、シンボルテーブルにまだ存在しない(すなわち、コンパイラにはまだ定義がない)任意の名前になり得る。

関連する問題