Pregunta

Tengo un modelo:

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

¿Cómo se utiliza el método Html.EditorFor dentro de un foreach?

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

Solución

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

Se ha señalado muchas veces que la publicación de dicha vuelta a un modelo de servidor no funcionará en mvc por defecto. Para editar correctamente con EditorFor en un bucle - for se debe utilizar como en:

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

Otros consejos

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

Además de algunos variables ocultas para al menos una propiedad del usuario se requieren:

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

No es lo que llamarían elegante pero funciona con respecto a la unión en su acción posterior.

¿Hay alguna otra razón (aparte ejemplo) para usar explícitamente el foreach ti mismo? Se podría hacer un ayudante editor personalizado (o pantalla) para User class y @Html.EditorFor(model=>model.Users) maquillaje. Razor utilizará el foreach internamente para procesar cada elemento con su ayudante personalizado.

Es sólo una idea para aquellos que visitan la pregunta con la verdad ni idea de cómo manejar estos casos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top