Как добавить массив объектов в значение маршрута при отправке формы? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть представление MVC с кучей входов. Когда я отправляю форму, я хочу добавить массив объектов к значениям маршрута в дополнение к передаче модели. В основном у меня есть дочерняя сетка на странице, в которую пользователи могут добавлять / удалять элементы. Я не хочу сохранять изменения, пока они не будут готовы сохранить всю страницу.

Я видел в другом месте на Stack Overflow, как добавить поле в маршрутизацию с помощью скрытого поля, но как мне сделать массив объектов?

My View:

    using (Html.BeginForm("SaveThis", "Report", FormMethod.Post, new { @style = "width: 100%;", @id = "myPage" }))
    {
        //bunch of fields
        <div class="col-md-6">
            <input type="button" value="Submit" onclick="submitForm(this)" class="btn btn-default btn-block bg-MBRBlue" />
        </div>
    }

javascript В настоящее время у меня есть:

    <script>
        function submitForm(e) {
            debugger;
            var dataSets = getGridData();
            //code to add dataSets to routing would go here??
            $("#myPage").submit();
        }

        // more javascript code...

    </script>

Код контроллера, который я передал бы:

    [HttpPost]
    public ActionResult SaveThis(MyViewModel viewModel, GridDataViewModel[] gridData)
    {
        //code to save model info here

        //code to create/update/delete grid stuff here
    }

Любая помощь была бы очень признательна.

1 Ответ

0 голосов
/ 29 мая 2020

Я не знаю, есть ли лучший способ, но я решил это, используя шаблоны редактора, как показано ниже:

Модели классов:

public class MyViewModel
{
    public int? Id { get; set; }
    public string Name { get; set; }

    public List<GridDataViewModel> GridDataViewModels { get; set; }
}

class GridDataViewModel
{
    public int Id { get; set; }
    public string Value { get; set; }
}

Просмотр MyViewModel:

   <form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Id" class="control-label"></label>
            <input asp-for="Id" class="form-control" />
            <span asp-validation-for="Id" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="Name" class="control-label"></label>
            <input asp-for="Name" class="form-control" />
            <span asp-validation-for="Name" class="text-danger"></span>
        </div>

        @Html.EditorFor(m => m.GridDataViewModels)

        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>

Затем вы добавляете новую директорию в директорию вашего представления под названием «EditorTemplates» и внутри нее вы добавляете новое представление с точным именем вашего списка ViewModel. В этом примере я помещаю имя «GridDataViewModel.cs html».

Внутренний вид помещенных вами шаблонов редактора:

@model WebApplication1.Models.GridDataViewModel
<div class="form-group">
     <label asp-for="Id" class="control-label"></label>
     <input asp-for="Id" class="form-control" />
     <span asp-validation-for="Id" class="text-danger"></span>
</div>
<div class="form-group">
     <label asp-for="Value" class="control-label"></label>
     <input asp-for="Value" class="form-control" />
     <span asp-validation-for="Value" class="text-danger"></span>
</div>

Когда вы публикуете, ваш список будет внутри вашего параметра MyViewModel . Вы можете исследовать больше вещей, но я думаю, что это даст вам некоторые идеи.

Это мой первый ответ, простите меня, если я допустил несколько английских sh ошибок или мой ответ не в лучшем формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...