15

MVC タイプのアプリケーションで Visual Studio によって頻繁に生成されるコードのサンプル行を次に示します。

@Html.DisplayFor(modelItem => item.LastName) 
  • かみそりの仕組みを理解しています ( @)
  • Html は、次のような静的ヘルパー関数を持つオブジェクトであることを理解していますDisplayFor()
  • item.LastNameこれは、データ/モデルの行と列を大まかに表していることを理解しています

...しかし、一体何modelItem =>ですか?昔は、=>ブール値に評価される演算子でした。この魔法は何ですか?

4

2 に答える 2

12

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

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

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

http://msdn.microsoft.com/en-us/library/bb397687.aspxを参照してください

于 2012-04-19T12:13:08.343 に答える
3

スキャフォールディングされたMVCコードを見たばかりでmodelItem、バングルスティックの回答に追加するだけだと思っていました。

問題のコードの一部は、おそらく標準の MVC スキャフォールディング インデックス ビュー (モデルが であるIEnumberable<TModel>) から来ており、これがそれを囲んでいます。

@foreach (var item in Model) {

}

コードは次の DisplayFor のオーバーロードを使用しています。

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

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

于 2015-04-30T15:03:34.447 に答える