Как использовать EditorFor внутри foreach
-
22-09-2019 - |
Вопрос
У меня есть модель:
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
внутренне для обработки каждого элемента с помощью вашего пользовательского помощника.
Просто идея для тех, кто посещает вопрос, на самом деле понятия не имея, как управлять этими случаями.