Помощник MVC BeginCollectionItem не привязан к экземпляру модели в модели представления - PullRequest
0 голосов
/ 09 мая 2019

Построение динамического списка в MVC5.Форма будет отправлена ​​на контроллер, и я вижу, что StudentList правильно заполнен в инструментах разработчика Chrome, но в контроллере StudentList пуст.

Модель:

public class Student
{
    public int id { get; set; }
    public string Name { get; set; }
}

public class StudentViewModel
{
    public Student student { get; set; }
    public List<Student> StudentList { get; set; }
}

Просмотр:

@model TaskTrack.ViewModels.StudentViewModel

    @using (Html.BeginForm("Create", "Timesheet", FormMethod.Post, new { @id = "addTaskForm" }))
    {
        <div id="task-row">
           //Partial view renders here.
        </div>
        <button class="btn save-day" type="submit" >Save Day</button>
    }

Частичное представление:

@model TaskTracker.ViewModels.StudentViewModel

@using (Html.BeginCollectionItem("StudentList"))
{
    <div class="form-row">
        <div class="form-group col-2">
            @Html.EditorFor(model => model.Student.Name, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Student.Name, "", new { @class = "text-danger" })
        </div>
    </div>
}

Если я извлекаю экземпляр Student из ViewModel и заменяю его на свойства модели студента, затем изменяю частичное представление, чтобы связываться непосредственно со свойством Name,это будет работать.

@Html.EditorFor(model => model.Student.Name, new { htmlAttributes = new { @class = "form-control" } })

до

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })

Пост контроллера:

    [HttpPost]
    public ActionResult Create(StudentViewModel model)

Когда я перехватываю пост до того, как он попадает в контроллер, я вижу егопривязана правильно, но в контроллере StudentList пуст.

Я пытаюсь избежать дублирования модели студента в модели представления, потому что она дублируется, и все правила проверки уже есть в модели Student, поэтому я хотел бынужно продублировать все это и в модели представления, что кажется неправильным.

...