Как передать коллекцию из View в контроллер при отправке POST запроса?

Можете ли вы посмотреть?
  • 1 декабря 2023 г. 22:49
Ответы на вопрос 2
Самый простой способ передать коллекцию из представления в контроллер в 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 нельзя добавлять сразу все роли - приходится делать это поочередно. Кстати, очень люблю задавать вопросы и сам на них отвечать - это одна из лучших функций интернета. 
Похожие вопросы