2012-04-19 18 views
13

Aquí está una línea de ejemplo de código que a menudo se genera mediante Visual Studio en un tipo de MVC de aplicación:MVC básico: ¿Qué hace "modelItem =>" hacer?

@Html.DisplayFor(modelItem => item.LastName) 
  • que entender cómo funciona afeitar (el @)
  • entiendo HTML es un objeto con funciones auxiliares estáticos, como DisplayFor()
  • entiendo item.LastName como esta vagamente representa una fila y columna de los datos/modelo

... pero ¿qué diablos es modelItem =>? De vuelta en mi día, => solía ser un operador que se evaluó a un valor booleano. ¿Qué es esta hechicería?

+1

La anotación es C#, no es específico de MVC. Ver MSDN: http://msdn.microsoft.com/en-us/library/bb311046.aspx – Oded

+0

¡Guau, me encantó esta pregunta! :) – Romias

Respuesta

12

Lo que estás haciendo allí es pasar una expresión lambda. Estos son esencialmente los mismos que delegados, punteros de función en C o funciones en Javascript. Estás diciendo básicamente Html DisplayFor "usa esta función para obtener el elemento de la pantalla". Su ejemplo debería ser probablemente:

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

De lo contrario, está intentando cerrar el "elemento" desde un ámbito exterior. Si esto es lo que está realmente tratando de hacer, entonces ModelItem está haciendo prácticamente nada ...

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

1

Acabo de ver modelItem en algún código MVC andamiaje y yo había pensado que acababa de añadir a respuesta de bunglesticks.

El fragmento de código en la pregunta probablemente procede de una vista de índice estándar MVC andamiaje (donde el modelo es una IEnumberable<TModel>) y tiene presente que la rodea:

@foreach (var item in Model) { 

} 

El código está usando esta sobrecarga de DisplayFor:

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

lo tanto, el ModelItem (como se dijo bunglestink) no está haciendo nada (no se utiliza en el resultado). El item.LastName devuelve el Apellido real para ese artículo en IEnumerable y DisplayFor generará el html correcto para el tipo de datos.