我有两个模型:Student
和Course
。我想创建一个编辑课程信息的简单表单,例如课程名称,并在课程中添加或删除学生。为此,Course
模型具有属性public virtual ICollection<Student> Students { get; set; }
。我创建这样的表单:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Create Course</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.Id)
<div class="form-group">
@Html.LabelFor(model => model.CourseName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CourseName)
@Html.ValidationMessageFor(model => model.CourseName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Time, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Time)
@Html.ValidationMessageFor(model => model.Time)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Students, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBoxFor(model => model.Students, (IEnumerable<SelectListItem>)ViewBag.Students)
@Html.ValidationMessageFor(model => model.Students)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
该表单可以毫无问题地将所有学生提取到列表中。当我点击保存按钮并开始调试我的应用程序时,课程,名称和时间的详细信息将成功传递到服务器,但所选的学生不会。不仅如此,当我加载表单时,如果课程中有一些学生,则不会在列表中选择这些学生。所以有人能告诉我,我犯的错误是什么?
答案 0 :(得分:1)
您需要在List<int>
模型中创建Course
。所以,它可以映射到它。列表框中的选定值将返回List<int>
而不是List<Student>
。因此,如果您无法编辑现有模型,则需要为此创建ViewModel
。
以下是示例课程模型或视图模型。
public class Course
{
public int Id { get; set; }
public string CourseName { get; set; }
public string Time { get; set; }
public List<int> Students { get; set; }
}