Html.DisplayFor puede repetir automáticamente a través de colecciones, que muestra una vista parcial para cada elemento de la colección.
Lo primero que debe hacer es crear una clase de modelo real, siendo la colección una propiedad de la clase.
public class Bar
{
public IEnumerable<Foo> foo { get; set; }
}
Devuelva esta clase desde su controlador en lugar de la colección sin procesar.
En segundo lugar, necesita una plantilla de pantalla para la clase Foo. Las plantillas de visualización son vistas parciales que deben colocarse en la carpeta Views/Shared/DisplayTemplates
.
Editar: Puede tenerlos en su subcarpeta de controladores de Vistas también si desea limitar la plantilla a un controlador en particular. Consulte this question para obtener más información.
Aquí se muestra un ejemplo de la sintaxis de la maquinilla de afeitar:
@model YourNameSpace.Foo
<p>@Model.BarBaz</p>
Guardar como Foo.cshtml
en el DisplayTemplates
carpeta dada anteriormente.
Esta plantilla es bastante simple porque se basa en su ejemplo en el que solo muestra una cadena, pero si los elementos de la colección son una clase con sus propias propiedades, podría crear una plantilla más elaborada.
Ahora en la vista original, usted puede deshacerse del bucle completo y acaba de escribir
@Html.DisplayFor(m => m.foo)
Aviso foo
es el nombre de la propiedad en su nueva clase de modelos que contiene la colección de edad que en loop antes .
DisplayFor sabrá automáticamente que la propiedad es de tipo foo
(colección de) Foo
y recoger la plantilla en la carpeta Foo.cshtml
DisplayTemplates
y mostrar una vez para cada elemento de foo
.
Creo que soy aún más estúpido, ya que no estoy seguro de cómo interpretar esto. El parámetro formal lambda m no se usa en la expresión. Entonces, ¿esto solo está allí porque lo requiere _DisplayFor_? Además, esperaba que '@ Html.Display (item.BarBaz)' funcionaría igual de bien, pero eso no representa nada. –
@ R.Schreurs Parece que la lambda necesita ser una expresión 'Func' que toma el tipo del modelo como parámetro, pero puede devolver cualquier cosa. – JohnnyHK
Soy estúpido también :) –