Question

J'ai un modèle:

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>
Était-ce utile?

La solution

@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])
 }

Autres conseils

@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 nécessaires:

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

Non ce que vous appelleriez élégant mais il fonctionne par rapport à la liaison dans votre post action.

Y at-il une autre raison (par exemple à part) pour utiliser explicitement la foreach vous? Vous pouvez faire une aide User class et faire @Html.EditorFor(model=>model.Users) éditeur personnalisé (ou affichage). Razor utilisera le foreach en interne pour traiter chaque élément avec votre Helper personnalisé.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top