【发布时间】:2016-08-28 18:15:54
【问题描述】:
我将一个列表传递给一个局部视图,它工作正常,它显示了所有数据,但是当我保存模型时,列表返回 null,我错过了什么?
- 不要关注对象,我写了假的例子。
这是cshtml:
@model ViewModels.StudentVM
@using (Html.BeginForm("SaveStudent", "StudentsView", FormMethod.Post}))
{
@Html.AntiForgeryToken();
<div class="row">
<span>Student name:</span>
@Html.TextBoxFor(s => s.Name)
</div>
<div>
@Html.Partial("StudentsList", Model.Students)
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn">
</div>
}
加载视图时,我将所有学生带到视图模型:
vm.Students = await _studentController.GetAllStudents(); // returned 20 Students.
局部视图:
@model IEnumerable<Entities.Students>
<table class="table-bordered">
@foreach (var item in Model)
{
<tr>
<td>
@Html.CheckBoxFor(modelItem => item.IsSelected)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
</tr>
}
</table>
我想获得所有选定的学生,所以假设我将选择 3 名学生。 然后点击保存按钮。结果:Model.Students 为空,尽管我选择了 3 个学生。我怎样才能得到那些学生?
【问题讨论】:
-
你不能使用partial来为复杂对象生成控件,除非你传递
HtmlFieldPrefix(参考this answer),但是正确的方法是使用EditorTemplatefor typeofStudents(以this answer为例) -
并注意复选框本身不会发布任何有意义的内容 - 您需要输入
Students对象的 ID 属性
标签: c# asp.net-mvc partial-views