Pergunta

Eu tenho um modelo:

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

Como utilizo o método Html.EditorFor dentro de um foreach?

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

Solução

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

Foi apontado muitas vezes que postar esse modelo de volta ao servidor não funcionará no MVC por padrão. Para editar corretamente com EditorFor em um loop - for deve ser usado como em:

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

Outras dicas

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

Além disso, são necessárias algumas variáveis ​​ocultas para pelo menos uma propriedade do usuário:

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

Não é o que você chamaria de elegante, mas funciona no que diz respeito à vinculação em sua pós-ação.

Existe algum outro motivo (exemplo separado) para usar explicitamente o foreach você mesma? Você pode fazer um ajudante de editor personalizado (ou exibição) para User class e fazer @Html.EditorFor(model=>model.Users). Razor usará o foreach Internamente para processar cada elemento com seu ajudante personalizado.

Apenas uma ideia para quem visita a pergunta realmente não tem idéia de como gerencie esses casos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top