使用 ASP.NET MVC5 将数据从数据库导入我视图中的下拉列表

Importing data from database into a dropdown list in my view using ASP.NET MVC5

我需要从我的数据库中获取数据并将其显示在我网页的下拉列表中: 返回的数据会有两个参数:DisciplineID 和 DisciplaneName。

在 Controller 之前一切正常。它 returns 正确的数据,但需要有关如何将数据正确移动到视图的帮助。

这是我使用 MVC5 的项目的分解:

型号Class:

public class Discipline
{
    public int DisciplineID { get; set; }
    public string DisciplineName { get; set; }
}

模型Class实现:

    public class DisciplineModel : IDiscipline
    {
            private List<Discipline> disciplinesList = new List<Discipline>();

            public IEnumerable<Discipline> disciplines()
            {
                LoadDisciplines(); //populates disciplinesList from database
                return disciplinesList;

            }
    }

控制器:

[HttpGet]
    public ActionResult EditDiscipline()
    {
        var disciplinesList = _idiscipline.disciplines();
        return View(disciplinesList);
    }

数据被带到这里,但需要将该数据移动到视图。

查看:

@model OnlineTestingSystem.Models.Discipline
<div class="container">
    @using (Html.BeginForm("EditDiscipline", "Discipline", FormMethod.Post))
    {

        <div class="form-group">
            @Html.LabelFor(a => a.DisciplineName, "Discipline Name")
            @Html.DropDownListFor(a => a.DisciplineID, Model.disciplines,"Selected")
        </div>
        <input class="btn btn-primary" type="submit" />
    }
    @ViewBag.message
</div>

我需要添加从下拉列表返回的数据以显示 DisciplineID。那么我该如何修改我的不同 类 来实现这个目标呢?

下面这行的语法不正确,我只是想表明这就是我想要做的。

@Html.DropDownListFor(a => a.DisciplineID, Model.disciplines,"Selected")

提前致谢。

首先,您需要创建一个 ViewModel 来保存列表和该列表中的选定 id

public class DisciplineViewModel
{

    public int? DisciplineId {get; set;}
    public List<Discipline> DisciplineList  {get ; set;}
}

然后在控制器中初始化这个视图模型:

[HttpGet]
public ActionResult EditDiscipline()
{
    var disciplinesList = _idiscipline.disciplines();
    var vm = new DisciplineViewModel
     {
           DisciplineList  = disciplinesList;
     }
    return View(vm);
}

然后在视图中:

 @model OnlineTestingSystem.Models.DisciplineViewModel
 <div class="container">
 @using (Html.BeginForm("EditDiscipline", "Discipline", FormMethod.Post))
 {

    <div class="form-group">
        @Html.LabelFor(m => m.DisciplineList)
        @Html.DropDownListFor(m => m.DisciplineId, new SelectList(Model.DisciplineList , "DisciplineID ", "DisciplineName "),  "Select..." )
    </div>
    <input class="btn btn-primary" type="submit" />
 }
@ViewBag.message