下拉列表未填充来自 3 个单独参考表的数据

Dropdownlists not populating with data from 3 separate reference tables

目前我正在使用 ASP.Net 使用 EF7 的 MVC 6。我正在使用默认的控制器生成器。出于某种原因,即使数据存在,我的下拉列表也没有填充创建或编辑页面上的数据。

澄清一下,3 个 select 列表由 3 个不同的 table 填充,它们都连接到我要添加的主要 table。

这是我得到的。

控制器代码

private readonly SchoolContext _context;

public SchoolsController(SchoolContext context)
{
    _context = context;    
}

public IActionResult Create()
{
   ViewData["DistrictId"] = new SelectList(_context.Districts, "DistrictId", "District");
   ViewData["LocationId"] = new SelectList(_context.Locations, "LocationId", "Location");
   ViewData["TierId"] = new SelectList(_context.Tiers, "TierId", "Tier");
   return View();
}

查看代码

@model School

包含在顶部,这是 select 元素之一的样子

<div class="form-group">
        <label asp-for="DistrictId" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            <select asp-for="DistrictId" class ="form-control"></select>
        </div>
    </div>

select 列表完全空白,没有错误,有数据。

这都是自动生成的,所以我完全不知道哪里出了问题。有什么建议吗?

假设您的视图名称是 School(ViewModel 的约定是视图名称 + "ViewModel")

class SchoolViewModel
{
    IEnumerable<SelectListItem> Districts;
    IEnumerable<SelectListItem> Locations;
    IEnumerable<SelectListItem> Tiers;
}

那么在你看来,

@model SchoolViewModel
...
@Html.DropDownList("Districts", m=>m.Districts, "-- Select--")
@Html.DropDownList("Locations", m=>m.Locations, "-- Select--")
@Html.DropDownList("Tiers", m=>m.Tiers, "-- Select--")

在你的控制器中

public IActionResult Create()
{
    var vm = new SchoolViewModel();
    vm.Districts = _context.Districts.Select(d => new
    {
        Text = d.District,
        Value = d.DistrictId.ToString()
    };

    //repeat for others...

    return View(vm);
}

您需要 属性 绑定到(选定值)和 属性 选项,并且它们需要具有不同的名称。理想情况下,您应该使用具有(例如)

的视图模型
public class SchoolVM
{
  public int DistrictId { get; set; }
  public IEnumerable<SelectListItem> DistrictList { get; set; }
  ....

并在 GET 方法中

public IActionResult Create()
{
  SchoolVM model = new SchoolVM
  {
    DistrictList = new SelectList(_context.Districts, "DistrictId", "District"),
    .....
  };
  return View(model);
}

并在视图中

@model SchoolVM
....
<select asp-for="DistrictId" asp-items="Model.DistrictList"></select>

或者,您可以使用 ViewBagViewData 并使用

<select asp-for="DistrictId" asp-items="ViewBag.DistrictList"></select>