您可以使用编辑器模板去做这个。
首先,为课程选择创建一个新类,并更新视图模型以获取该类的集合。
public class SelectedCourse
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}
public class StudentCourseVM
{
public int StudentId { set; get; }
public IEnumerable<SelectedCourse> SelectedCourses { get; set; }
}
您不需要将实体模型中的所有属性复制并粘贴到视图模型中。视图模型只需要视图绝对需要的那些属性。我假设您想为特定学生分配课程
现在转到您的~/Views/YourControllerName
并创建一个名为 EditorTemplates 的目录。在那里创建一个新的剃刀文件并给出名称SelectedCource.cshtml
Paste this code to the new file
@model SelectedCourse
<label>@Model.Name</label>
<input asp-for="IsSelected"/>
<input type="hidden" asp-for="Id" />
现在,在 GET 操作中,创建视图模型的对象,加载 SelectedCourses 集合并将其发送到视图。
public IActionResult Create()
{
// I hard coded the student id and the courses here.
// you may replace it with real data.
var vm = new StudentCourseVM { StudentId = 12 };
//Assuming we are assigning courses to the student with id 12
vm.SelectedCourses = new List<SelectedCourse>()
{
new SelectedCourse {Id = 1, Name = "CSS"},
new SelectedCourse {Id = 2, Name = "Swift"},
new SelectedCourse {Id = 3, Name = "IOS"},
new SelectedCourse {Id = 4, Name = "Java"}
};
return View(vm);
}
现在在你的主视图中(Create.cshtml
) 是 StudentCourseVM 的强类型,使用EditorFor
上的辅助方法SelectedCourses
财产。
@model StudentCourseVM
<form asp-action="Create">
@Html.EditorFor(f=>f.SelectedCourses)
<input type="hidden" asp-for="StudentId"/>
<input type="submit"/>
</form>
编辑器模板将为 SelectedCourses 集合中的每个项目执行编辑器模板文件中的代码。因此,您将拥有用户可见的课程名称和复选框。
在 HttpPost 操作方法中,您可以使用相同的视图模型作为参数。提交表单后,您可以循环浏览中的项目SelectedCourses
属性检查IsSelected
适当的价值。用户在用户界面中选择的课程将有一个true
value.
[HttpPost]
public IActionResult Create(StudentCourseVM model)
{
var studentId = model.StudentId;
foreach (var modelSelectedCourse in model.SelectedCourses)
{
if (modelSelectedCourse.IsSelected)
{
//this one is selected. Save to db
}
}
// to do : Return something
}
在页面加载时预先选择一些复选框
有时,您希望在页面加载时预先选择一些复选框(例如:对于编辑屏幕,您希望将已保存的课程显示为选中状态)。为此,您只需设置IsSelected
对应的属性SelectedCourse
在 GET 操作方法中将对象设置为 true。
public IActionResult Edit(int id)
{
// I hard coded the student id and the courses here.
// you may replace it with real data.
var vm = new StudentCourseVM { StudentId = id };
//Assuming we are assigning courses to the student with id 12
vm.SelectedCourses = new List<SelectedCourse>()
{
new SelectedCourse {Id = 1, Name = "CSS"},
new SelectedCourse {Id = 2, Name = "Swift", IsSelected = true },
new SelectedCourse {Id = 3, Name = "IOS", IsSelected = true },
new SelectedCourse {Id = 4, Name = "Java"}
};
return View(vm);
}
上面的代码将预先选择复选框Swift and IOS.