Domanda

Ho un modello:

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

Come posso utilizzare il metodo Html.EditorFor all'interno di un foreach?

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

Soluzione

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

E 'stato sottolineato più volte che la pubblicazione di un tale modello di nuovo al server non funziona in MVC per impostazione predefinita. Per l'editing correttamente con EditorFor in un ciclo - for dovrebbe essere usato come in:

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

Altri suggerimenti

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

Inoltre sono richieste alcune variabili nascoste per almeno una proprietà dell'Utente:

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

Non è quello che chiameresti elegante ma funziona rispetto al legame nell'azione post.

C'è qualche altro motivo (ad esempio a parte) per esplicitamente utilizzando il foreach te stesso? Si potrebbe fare un editor personalizzato (o display) aiuto per User class e fare @Html.EditorFor(model=>model.Users). Razor utilizzerà il foreach internamente per l'elaborazione di ogni elemento con il vostro aiuto personalizzato.

Solo un'idea per chi visita la domanda con davvero idea di come gestire questi casi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top