Как опубликовать данные формы со списком списка? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь сохранить список списков, где у меня есть флажок, содержащий некоторые варианты, где есть несколько вариантов.Я получаю первый список просто отлично, но реквизит "children" всегда возвращается как ноль.

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

Я видел, что у кого-то была похожая проблема: Форма сообщения MVC со списком списков

Но я не смог его использовать, поэтому я 'Надеюсь, вы, ребята, сможете мне помочь.

ViewModel

 public class Input
    {
        public string title { get; set; }
        public int id { get; set; }
        public bool value { get; set; }
        public List<Input> children { get; set; }


        public Input()
        {
            children = new List<Input>();
        }
    }

Контроллер

[HttpGet]
        public IActionResult Services()
        {
            var Inputs = new List<Input>() {
                    new Input(){title="test",id=1 },
                    new Input(){title="test2",id=2,
                        children =new List<Input>(){
                        new Input(){title="test3",id=3 },
                        new Input(){title="test4",id=4 }
                    } },
                };

            return View(Inputs);
        }
 [HttpPost]
        public IActionResult Services(List<Input> model)
        {
            return Redirect("/");

        }

Просмотр

@model List<Input>;
 <form asp-controller="Home" asp-action="Services" method="post">
                    @for (int i = 0; i < Model.Count; i++)
                    {
                        @Html.HiddenFor(m => m[i].title)
                        @Html.HiddenFor(m => m[i].id)
                        @Html.HiddenFor(m => m[i].children)
                         <div class="checkbox">
                             <label class="form-check-label">
                                 @Html.CheckBoxFor(m => m[i].value, new { @class = "form-check-input collapser" })
                                 @Model[i].title
                                 <span class="form-check-sign">
                                     <span class="check"></span>
                                 </span>
                             </label>
                         </div>
                        if(Model[i].children != null){
                            string containerName = "["+i+"].value" + "Container";
                            <div name="@containerName">
                                <div class="checkbox">
                                @for (int c = 0; c < Model[i].children.Count; c++){
                                    @Html.HiddenFor(m => m[i].children[c].title)
                                    @Html.HiddenFor(m => m[i].children[c].id)
                                    @Html.HiddenFor(m => m[i].children[c].children)
                                     <label class="form-check-label">
                                         @Html.CheckBoxFor(m => m[i].children[c].value, new { @class = "form-check-input" })
                                         @Model[i].children[c].title
                                         <span class="form-check-sign">
                                             <span class="check"></span>
                                         </span>
                                     </label>
                                }
                                </div>
                            </div>
                        }
                    }
                    <button type="submit">Save</button>
                </form>

1 Ответ

1 голос
/ 18 июня 2019

Используйте инструменты разработчика браузера (нажмите F12), чтобы проверить данные формы заголовков запросов в сети, проблема возникает в согласованности привязок модели, попробуйте закомментировать следующие строки кода:

@Html.HiddenFor(m => m[i].children)

@Html.HiddenFor(m => m[i].children[c].children)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...