Можете ли вы посмотреть?
Самый простой способ передать коллекцию из представления в контроллер в ASP.NET MVC через POST-запрос - использовать модель представления (ViewModel) с свойством списка или массива, которое будет содержать вашу коллекцию данных.
Вот пример использования модели представления для передачи коллекции данных из представления в контроллер.
Первоначально необходимо создать модель, которую вы собираетесь передать:
``` C#
public class SomeViewModel
{
public IEnumerable<SomeModel> SomeModels { get; set; }
}
```
В View вам нужно будет сформировать форму для отправки данных:
``` HTML
@model SomeViewModel
<form method="post">
@for (int i = 0; i < Model.SomeModels.Count(); i++)
{
<input type="hidden" asp-for="@Model.SomeModels[i].Id" />
<input type="text" asp-for="@Model.SomeModels[i].Name" />
<input type="text" asp-for="@Model.SomeModels[i].Value" />
// и т. д. в зависимости от того, какие поля у вас есть
}
<input type="submit" value="Send" />
</form>
```
То есть вам необходимо указать для каждого элемента коллекции индекс i.
В контроллере вы можете принять эту модель следующим образом:
``` C#
[HttpPost]
public IActionResult SomeAction(SomeViewModel model)
{
foreach (var item in model.SomeModels)
{
// Здесь вы можете работать с данными каждого элемента
var id = item.Id;
var name = item.Name;
var value = item.Value;
// и т. д.
}
return RedirectToAction("Index");
}
```
Главное помнить, что индексы элементов в форме должны идти без пропусков и начинаться с нуля, иначе при передаче коллекции будут переданы не все её элементы.
Переформулировал Модель так, что теперь передается только Модель, а не коллекция. Проблема в представлении не устранена, но решение было найдено в другой похожей задаче. В добавок к этому, обнаружил, что в системе аутентификации Identity нельзя добавлять сразу все роли - приходится делать это поочередно. Кстати, очень люблю задавать вопросы и сам на них отвечать - это одна из лучших функций интернета.