1

在 MVC5 中构建动态列表。表单将发布到控制器,我可以看到在 chrome 开发工具中正确填充了 StudentList,但在控制器中,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>
}

如果我从 ViewModel 中取出 Student 实例并将其替换为学生模型属性,然后将局部视图更改为直接绑定到 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 是空的。

我试图避免在视图模型中复制学生模型,因为它是重复的,并且所有验证规则都已经在学生模型中,所以我也必须在视图模型中复制所有这些,这似乎是错误的。

4

0 回答 0