Предположим, у вас есть эта модель настройки:
public class ModelWithList {
int Id { get; set; }
string Name { get; set; }
List<SetOfGroups> GroupSets { get; set; }
}
public class SetOfGroups
{
public int GroupId { get; set; }
public string GroupName { get; set; }
}
Затем вы можете использовать цикл for
для итерации GroupSets
и назначить его индекс для каждого числового типа / string
/ DateTime
(включая Nullable<T>
) свойства, которые он имеет:
@model ModelWithList
@* other code *@
@for (int i = 0; i < Model.GroupSets.Count; i++)
{
@Html.HiddenFor(model => model.GroupSets[i].GroupId)
@Html.HiddenFor(model => model.GroupSets[i].GroupName)
}
Далее, предположим, что вы перемещаете SetOfGroups
свойства и создайте новый список:
public class SetOfGroups
{
List<Group> Groups { get; set; }
}
public class Group
{
public int GroupId { get; set; }
public string GroupName { get; set; }
}
Затем вы должны добавить еще один цикл for
, чтобы связать их:
@model ModelWithList
@* other code *@
@for (int i = 0; i < Model.GroupSets.Count; i++)
{
@for (int j = 0; j < Model.GroupSets[i].Groups.Count; j++)
{
@Html.HiddenFor(model => model.GroupSets[i].Groups[j].GroupId)
@Html.HiddenFor(model => model.GroupSets[i].Groups[j].GroupName)
}
}
Хотя возможно добавить вложенные списки в представление, как в примере выше, циклы для рендеринга помощников HTML станут более сложными, и их следует избегать.
Важное примечание:
Вы не должны назначать HiddenFor
для List<T>
следующим образом:
@Html.HiddenFor(model => model.GroupSets)
, поскольку Razor неявно вызывает метод ToString()
для этого объекта List<T>
, в результате чего полное имя списка вставляется в атрибут value
, и привязка будет игнорировать его, поскольку GroupSets
не является string
свойство:
<input id="GroupSets" name="GroupSets" type="hidden" value="System.Collections.Generic.List`1[ProjectNamespace.Models.SetOfGroups]">
Похожие проблемы:
Элемент списка внутри модели всегда пуст в сообщении - Asp.net MVC