[asp.net-mvc]检索列表框中的所有项目和只选择那些在 db

发布时间: 2017/3/25 9:53:36
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

使用第一种方法我在列表框中设置默认主题,使用第二次我检索只有这些被选的人。

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;
    }

如何在列表框中是所有的主题,但所选只有这些即 db?

这里是我的列表框

<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>

解决方法 1:

你的模型属性 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 ,那里是没有需要产生额外的开销,创建另一个重复的 SelectListListBoxFor() 方法
赞助商