下拉列表未填充来自 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>
或者,您可以使用 ViewBag
或 ViewData
并使用
<select asp-for="DistrictId" asp-items="ViewBag.DistrictList"></select>
目前我正在使用 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>
或者,您可以使用 ViewBag
或 ViewData
并使用
<select asp-for="DistrictId" asp-items="ViewBag.DistrictList"></select>