Como usar o EditorFor dentro de um foreach
-
22-09-2019 - |
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>
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.