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