检索列表框中的所有项目,并仅选择数据库中的那些
本文关键字:选择 那些 数据库 列表 检索 项目 | 更新日期: 2023-09-27 18:21:42
使用第一种方法,我在列表框中设置默认主题,使用第二种方法,我只检索这些被选中的人。
public void SubjectsList()
{
ViewBag.Subjects =
new SelectList(new[] { "Math", "Physic", "English" }
.Select(x => new { value = x, text = x }),
"Value", "Text");
}
public void SubjectsFromDb(int id)
{
var students = _db.Subjects.AsEnumerable().Where(x => x.StudentId == id).Select(q => new SelectListItem
{
Value = q.Name,
Text = q.Name,
}).ToList();
ViewBag.Subjects = students;
}
我如何在列表框中执行此操作,所有主题,但仅选择数据库中的这些?
这是我的列表框
<div class="form-group">
@Html.LabelFor(model => model.Subject, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBoxFor(model => model.Subject,
new MultiSelectList((IEnumerable<SelectListItem>)ViewBag.Subjects, "Value", "Text"),
new { style = "display:block;" })
@Html.ValidationMessageFor(model => model.Subject)
</div>
</div>
您的模型属性Subject
需要public IEnumerable<string> Subject { get; set; }
,尽管我建议将其重命名为Subjects
- 复数(并重命名ViewBag
属性
在 GET 方法中,将现有主体分配给模型
var model = yourModel()
{
Subjects = _db.Subjects.Where(x => x.StudentId == id).Select(q => q.Name);
};
ViewBag.SubjectList = new SelectList(new[] { "Math", "Physic", "English" });
return View(model);
然后在视图中其
@Html.ListBoxFor(m => m.Subjects, (SelectList)ViewBag.SubjectList)
旁注:
- 无需创建匿名的额外开销生成
SelectList
的对象 - 您可以删除.Select(x => new { value = x, text = x }), "Value", "Text")
- 由于它已经是一个
SelectList
,因此不需要额外的在SelectList
ListBoxFor()
方法