2012-04-19 8 views
13

は、多くの場合、アプリケーションのMVCタイプでのVisual Studioで生成されたコードのサンプル行です:基本MVC: "modelItem =>"は何をしますか?ここ

@Html.DisplayFor(modelItem => item.LastName) 
  • 私はHTMLが対象であることを理解どのようにかみそりの作品(@
  • 理解しますDisplayFor()
  • 私はこのようitem.LastName理解するように、静的なヘルパー機能と、緩くデータ/モデルの行と列を表す

...でも、一体何がmodelItem =>なのですか?戻る私の日には、=>は、ブール値に評価された演算子でした。この魔術は何ですか?

+1

表記法はC#であり、MVC固有ではありません。 MSDNを参照してください:http://msdn.microsoft.com/en-us/library/bb311046.aspx – Oded

+0

うわー、私はこの質問を愛していました! :) – Romias

答えて

12

ここで何をしているのですか?ラムダ式を渡しています。これらは、デリゲート、Cの関数ポインタ、またはJavascriptの関数と本質的に同じです。あなたは基本的にHtml DisplayForに "このアイテムを表示するためにこの関数を使う"と言っています。実際にはあなたの例はおそらく次のようになります。

@Html.DisplayFor(modelItem => modelItem.LastName) 

それ以外の場合は、「項目」を外側のスコープから閉じようとしています。これはあなたが本当にやろうとしているものであれば、modelItemは、本質的に何もしていない...

http://msdn.microsoft.com/en-us/library/bb397687.aspx

1

を参照してください私はいくつかの足場MVCコードでmodelItemを見て、私はちょうどに追加しようと思いましたのですバングルスティックの答え。

問題のコードの一部は、おそらく(モデルは IEnumberable<TModel>ある)標準MVC足場インデックスビューから来て、持っている

このそれを取り巻く:

@foreach (var item in Model) { 

} 

DisplayForのこのオーバーロードを使用しているコード:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression 
) 

したがって、modelItem(bunglestinkが言ったように)は何もしていません(結果には使用されていません)。 item.LastNameは、IEnumerable内のその項目の実際のLastNameを返し、DisplayForはデータ型の正しいhtmlを生成します。

関連する問題