2010-04-13 3 views
4

J'ai une propriété dans mon modèle qui est un type de collection (Liste). Je voudrais appeler pour chaque élément de cette collection Html.DisplayFor ou Html.EditorFor. Comment puis-je faire ceci ?ASP.NET MVC 2: Comment appeler DisplayFor pour chaque élément d'une collection?

EDIT Ce n'est pas une vue typée. C'est une vue modélisée. Il n'y a que ViewData.ModelMetadata.

+0

duplication possible de http://stackoverflow.com/questions/1478378/using-html-editorfor-with-an-ienumerablet –

Répondre

2

Quelque chose comme ça, selon vous?

<% foreach (var item in Model.MyCollection) { %> 
    <%= html.EditorFor... %> 
    ... 
<% } %> 

Voir aussi using Html.EditorFor with an IEnumerable<T>

+0

Mais comment faire cela dans une vue temple. Il n'y a pas de Model.items. Juste ViewData.ModelMetadata .. – user137348

+0

Si votre collection est dans un élément ViewData, ce serait quelque chose comme 'foreach (MyItemType élément dans (IEnumerable ) ViewData [" MyCollection "])' –

+0

oui mais le MyItemType pourrait être quelque chose .. pour J'essaie de créer un modèle .. Quelque chose comme ici http://www.matthidinger.com/archive/2009/08/15/creating-a-html.displayformany-helper-for-mvc-2.aspx Je ne comprends pas les trucs d'expression :-( – user137348

1

La meilleure façon de le faire est d'ajouter juste une propriété « SelectedItem » à votre modèle:

public class YourModel 
{ 

public IEnumberable<Item> YourCollection 
{ 
get; 
} 


public Item SelctedItem 
{ 
get; 
set; 
} 


} 

Ensuite, il suffit attribuer à chaque élément de la liste à la selctedItem propriété:

<% foreach (var item in Model.YourCollection) { %> 

Model.SelctedItem = item; 

<%= html.EditorFor(SelctedItem) %> 
    ... 
<% } %> 
8

Pouvez-vous essayer

<% foreach (var item in Model.MyCollection) { %> 
    <%= html.EditorFor(m=>item) %> 
<% } %> 
+0

J'ai juste essayé ceci, cela fonctionne réellement! – Kralizek

Questions connexes