Вопрос

У меня есть модель:

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

Как мне использовать метод Html.EditorFor внутри foreach?

@model MyListModel
<table>
  <tr>
    <th></th>
  </tr>
  @foreach (var item in Model.Users) {
     <tr>
       <td>
          @Html.EditorFor(item.Enabled)
       </td>
     </tr>
  }
</table>
Это было полезно?

Решение

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

Много раз указывалось, что отправка такой модели обратно на сервер не будет работать в mvc по умолчанию.Для правильного редактирования с EditorFor в цикле - for следует использовать как в:

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

Другие советы

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

Кроме того, требуются некоторые скрытые переменные по крайней мере для одного свойства пользователя:

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

Не то, что вы бы назвали элегантным, но это работает в отношении привязки к вашему действию post.

Есть ли какая-либо другая причина (кроме примера) для явного использования foreach себя?Вы могли бы создать пользовательский редактор (или дисплей) helper для User class и сделать @Html.EditorFor(model=>model.Users).Бритва будет использовать foreach внутренне для обработки каждого элемента с помощью вашего пользовательского помощника.

Просто идея для тех, кто посещает вопрос, на самом деле понятия не имея, как управлять этими случаями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top