2009-12-31 8 views
34

J'ai un modèle:Comment utiliser EditorFor dans un foreach

public class MyListModel 
{ 
    public int ID {get;set;} 
    public List<User> Users{get;set;} 
} 

Comment puis-je utiliser la méthode Html.EditorFor dans un foreach?

@model MyListModel 
<table> 
    <tr> 
    <th></th> 
    </tr> 
    @foreach (var item in Model.Users) { 
    <tr> 
     <td> 
      @Html.EditorFor(item.Enabled) 
     </td> 
    </tr> 
    } 
</table> 

Répondre

57
@Html.EditorFor(x=> item.Enabled) 

Il a été souligné à plusieurs reprises que l'affichage d'un tel modèle de retour au serveur ne fonctionne pas dans mvc par défaut. Pour éditer correctement avec EditorFor dans une boucle - for doit être utilisé comme dans:

@for(var i = 0; i< Model.Users.Count;i++){ 
     Html.EditorFor(i=>Model.Users[i]) 
} 
+2

Je suis assez sûr que cela ne fonctionne pas. Avez-vous testé cela? –

+4

fonctionne vraiment. Le "côté droit" d'un lambda ne doit pas faire référence au "côté gauche". – Eilon

+0

Eh bien gee, voulez-vous regarder ça! Cela va nettoyer certains des Html.RenderPartial() que j'ai utilisés inutilement. –

9
@for (var i = 0; i < Model.Users.Count; i++) 
{ 
<tr> 
    <td>@Html.EditorFor(model => model.Users[i].Enabled)</td> 
    <td>@Html.EditorFor(model => model.Users[i].FirstName)</td> 
    <td>@Html.EditorFor(model => model.Users[i].LastName)</td> 
</tr> 
} 

Plus quelques variables cachées pour au moins une propriété de l'utilisateur sont requis:

@for (var i = 0; i < Model.Users.Count; i++) 
{ 
    @Html.HiddenFor(model => model.Users[i].FirstName) 
} 

Non Ce que vous appelleriez élégant, mais cela fonctionne en ce qui concerne la liaison dans votre action post.

0

Existe-t-il une autre raison (exemple) pour utiliser explicitement le foreach? Vous pouvez créer un assistant d'édition personnalisée (ou d'affichage) pour User class et créer @Html.EditorFor(model=>model.Users). Razor utilisera le foreach en interne pour traiter chaque élément avec votre assistant personnalisé.

Juste une idée pour ceux qui visitent la question avec vraiment aucune idée comment gérer ces cas.

Questions connexes