Я пытаюсь создать очень простую форму, чтобы отправить обратно некоторые значения из коллекции моделейModelBinding на коллекции модели
Когда я нажмите на кнопку отправить, и посмотреть на коллекции вернулся он не содержит каких-либо объектов. Я также вижу, что asp-for не генерирует индекс коллекции, который я ожидал.
У меня есть простая модель
public class CustomModel
{
public int Id { get; set; }
public string Question { get; set; }
public string Answer { get; set; }
}
И это мой взгляд
@model ICollection<CustomModel>
<form asp-action="Index" asp-controller="Home" method="POST">
<table>
@foreach (var m in Model)
{
<tr>
<td><label asp-for="@Model">@m.Question</label><input asp-for="@m.Answer"/></td>
</tr>
}
</table>
<input type="submit" value="save" />
Пример того, как это будет выглядеть, когда страница renderd:
<tr>
<td><label>Your name?</label><input type="text" id="m_Answer" name="m.Answer" value="" /></td>
</tr>
<tr>
<td><label>Your Age?</label><input type="text" id="m_Answer" name="m.Answer" value="" /></td>
</tr>
Это были я предположил, что у него будет индекс, но вместо этого выглядит, что он рассматривает каждую строку как искусственную модель вместо коллекции моделей.
Что я здесь делаю неправильно? Это ошибка или по дизайну?
тестовый проект Github https://github.com/lasrol/TestModelBindingList
Это работает, но это ошибка? Является ли это шагом назад, если я не ошибаюсь, я мог бы использовать foreach в более ранних версиях mvc? Также почему я не могу использовать ICollection, но я могу использовать IList или List, что такое diffrence? –
Здесь ничего не изменилось. Вы можете использовать 'foreach' для простых типов, таких как' List 'или' List ', но если вы хотите редактировать сложные типы, вы должны использовать' for' aproach. Вы не можете использовать ICollection, потому что этот интерфейс не обеспечивает доступ к индексу. В основном вы можете использовать любой объект, который имеет что-то вроде этого 'T this [int index] {get; задавать; } ' –
YuriyP
Я вижу, спасибо, что разъяснил это для меня. –