2009-12-31 26 views
34

tengo un modelo:Cómo utilizar EditorFor dentro de un foreach

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> 

Respuesta

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

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

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

Estoy bastante seguro de que eso no funciona. ¿Has probado eso? –

+4

Definitivamente funciona. El "lado derecho" de una lambda no tiene que hacer referencia al "lado izquierdo". – Eilon

+0

Bien, ¿lo verías? Eso borrará algunos de los Html.RenderPartial() s que he estado usando innecesariamente. –

9
@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 algunas variables ocultas para se requieren al menos una propiedad del usuario:

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

lo que llamarías elegante pero funciona con respecto al enlace en tu acción posterior.

0

¿Hay alguna otra razón (ejemplo aparte) para usar explícitamente el foreach usted mismo? Puede hacer un Ayudante de Editor personalizado (o Pantalla) para User class y hacer @Html.EditorFor(model=>model.Users). Razor usará el foreach internamente para procesar cada elemento con su Ayuda personalizada.

Solo una idea para aquellos que visitan la pregunta sin realmente tener ni idea de cómo manejar estos casos.

Cuestiones relacionadas