目前我正在使用EF7与ASP.Net MVC 6合作。我正在使用默认控制器生成器。由于某些原因,即使存在数据,我的下拉也不会填充创建或编辑页面上的数据。
只是为了澄清3个选择列表由3个不同的表填充,这些表都连接到我要添加的主表。
这是我得到的。
控制器代码
ps ax | grep ruby
#=> 857 pts/19 Sl+ 0:04 /home/andreydeineko/.rvm/rubies/ruby-2.2.3/bin/ruby bin/rails server
#=> 14639 pts/18 S+ 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn rails
#=> 25368 pts/17 Sl+ 0:02 /home/andreydeineko/.rvm/rubies/ruby-2.2.3/bin/ruby bin/rails c
kill -9 857
ps ax | grep ruby
#=> 14639 pts/18 S+ 0:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn rails
#=> 25368 pts/17 Sl+ 0:02 /home/andreydeineko/.rvm/rubies/ruby-2.2.3/bin/ruby bin/rails c
查看代码
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();
}
包含在顶部,这是select元素之一
@model School
选择列表完全空白,没有数据存在错误。
这都是自动生成的,所以我完全不知道出了什么问题。有什么建议吗?
答案 0 :(得分:1)
假设您的视图名称为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);
}
答案 1 :(得分:1)
您需要绑定到(所选值)的属性和选项的属性,并且它们需要具有不同的名称。理想情况下,您应该使用具有(例如)
的视图模型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>