Передача списка из представления в контроллер

#entity-framework #asp.net-core #razor #asp.net-core-mvc

#entity-framework #asp.net-core #razor #asp.net-core-mvc

Вопрос:

У меня есть этот контроллер, который создает список, где T — модель класса, называемая GamingEvents.

     public async Task<IActionResult> Index(DateTime start, DateTime end)
    {
        List<GamingEvents> gamingEventsListings = await sg.GenerateGameEventsSchedule();

        ViewData["RangeStart"] = start;
        ViewData["RangeEnd"] = end;

        return View(gamingEventsListings);
    }
  

На мой взгляд, я создаю эту таблицу для отображения данных:

     @model List<GameManager.Models.GamingEvents>

    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.GameId)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.GameName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DayNames)
            </td>
        </tr>
    }
  

Теперь я хочу отправить все эти данные на другой контроллер. Итак, я создал эту форму:

 <form asp-controller="Scheduling" asp-action="ScheduleBlock" method="post">
    <fieldset>
        <button formaction="/Scheduling/ScheduleBlock/">Schedule Games</button>
    </fieldset>
</form>
  

Итак, мне нужен метод GenerateGameEventsFromSchedule(), чтобы принять два свойства данных, которые я передаю представлению, ViewData [«RangeStart»] и ViewData [«RangeEnd»].

Итак, я начал писать контроллер:

     [HttpPost]
    public async Task<IActionResult> GenerateGameEventsFromSchedule(DateTime start, DateTime end)
    {

        foreach (event in GamingEvents)
        {
            //...do this
        }

        return View();
    }
  

Очевидно, что это не закончено.

Моя проблема в том, как мне передать список игровых событий из моего представления выше на этот новый контроллер, чтобы я мог выполнить дополнительную обработку для каждого элемента в списке?

Спасибо!

Комментарии:

1. Вы этого не делаете. Вы снова запрашиваете их из базы данных.

2. @ChrisPratt как насчет передачи двух значений даты, которые я записываю в представлении следующим образом: @ViewData[«RangeStart»] и @ViewData [«RangeEnd»]? а затем передать их новому контроллеру? Спасибо!

3. Ну, эти значения поступают откуда -то. Если они жестко запрограммированы, то просто используйте те же жестко запрограммированные значения. Если они поступают из запроса, то вы должны передать их таким же образом (т. Е. Просто добавить их в качестве параметров к ссылке, которую вы создаете на странице). Если они были заданы пользователем при отправке формы, вы можете передать их в URL ссылки или вы могли бы сохранить их в Session . Это действительно зависит от того, что именно вы делаете.

4. @ChrisPratt Ну, я создал первое представление, чтобы менеджер игры мог посмотреть сгенерированное расписание, а затем решить, хотят ли они на самом деле запланировать его … если они это сделают, то они нажимают на ссылку, и она отображает то, что они видят на экране.

5. Если в результате перехода по ссылке произойдет что-то атомарное, это не должно быть ссылкой . Вам нужно опубликовать форму. Запросы GET должны быть идемпотентными (т. Е. вы можете вызывать их 100 раз, и состояние системы будет точно таким же, как при запуске).