检索列表框中的所有项目,并仅选择数据库中的那些

本文关键字:选择 那些 数据库 列表 检索 项目 | 更新日期: 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)

旁注:

  1. 无需创建匿名的额外开销生成SelectList的对象 - 您可以删除.Select(x => new { value = x, text = x }), "Value", "Text")
  2. 由于它已经是一个SelectList,因此不需要额外的在SelectList ListBoxFor()方法