Html.DisplayFor può iterare automaticamente collezioni, mostrando una visione parziale per ogni elemento della collezione.
La prima cosa che devi fare è creare una classe modello attuale, con la collezione come proprietà della classe.
public class Bar
{
public IEnumerable<Foo> foo { get; set; }
}
Restituisce questa classe dal controller anziché dalla raccolta non elaborata.
In secondo luogo è necessario un modello di visualizzazione per la classe Foo. I modelli di visualizzazione sono viste parziali che devono essere collocati nella cartella Views/Shared/DisplayTemplates
.
Modifica: è possibile averli anche nella sottocartella controller di Views se si desidera limitare il modello a un controller specifico. Vedere this question per ulteriori informazioni.
Ecco un esempio nella sintassi rasoio:
@model YourNameSpace.Foo
<p>@Model.BarBaz</p>
Salva come Foo.cshtml
nella DisplayTemplates
cartella di cui sopra.
Questo modello è piuttosto semplice perché si basa sul tuo esempio in cui si sta visualizzando solo una stringa, ma se gli elementi della raccolta in cui una classe con le proprie proprietà è possibile creare un modello più elaborato.
Ora nella vista originale, si può sbarazzarsi del ciclo del tutto e solo scrivere
@Html.DisplayFor(m => m.foo)
Avviso foo
è il nome della proprietà nella nuova classe del modello che contiene la vecchia collezione si Looped finita prima .
DisplayFor saprà automaticamente che la proprietà foo
è di tipo (raccolta di) Foo
e ritirare il modello Foo.cshtml
nella cartella DisplayTemplates
e dimostrare una volta per ogni elemento in foo
.
fonte
2014-02-19 23:36:34
Penso, sono ancora più stupido, perché non sono sicuro di come interpretarlo. Il parametro formale lambda m non viene utilizzato nell'espressione. Quindi è presente solo perché è richiesto da _DisplayFor_? Inoltre, mi aspettavo che '@Html.Display (item.BarBaz)' funzionasse altrettanto bene, ma questo non rende nulla. –
@ R.Schreurs Sembra che lambda debba essere un'espressione 'Func' che prende come parametro il tipo del modello, ma può restituire qualsiasi cosa. – JohnnyHK
Anch'io sono stupido :) –