在我的应用程序中,我试图通过从EF Core数据库中获取数据来填充下拉菜单,但不幸的是,我已经尝试了两天没有成功。
我试着按照这篇文章的建议去做,但是我总是出错。
更具体地说,我现在面临的错误是
'IEnumerable'不包含'Years'的定义,并且找不到可访问的扩展方法'Years'接受类型为'IEnumerable'的第一个参数
这个错误来自于视图:
@Html.DropDownList(m => m.Years, Model.Years, "-- Select year --")
这是我的模型类:
public partial class Bdgfixmonth
{
public int Counter { get; set; }
public int Byear { get; set; }
//
public IEnumerable<SelectListItem> Years { get; set; }
public string Bbudget { get; set; }
public int Bmonth { get; set; }
public string Blongmonth { get; set; }
public int Closed { get; set; }
public string Current { get; set; }
}
这是GET
动作方法Index
的控制器:
private readonly salesContext _context;
public IEnumerable<SelectListItem> Years { get; set; }
public bdgfixmonthController(salesContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var bdgfixmonths = await _context.Bdgfixmonths.ToListAsync();
IEnumerable<SelectListItem> GetAllYears()
{
IEnumerable<SelectListItem> list = _context.Bdgfixmonths
.AsEnumerable()
.Select(s => new SelectListItem
{
Selected = false,
Text = s.Byear.ToString(),
Value = s.Byear.ToString()
});
return list;
}
Years = GetAllYears();
return View(bdgfixmonths);
}
这里的目标是用数据库的数据填充下拉菜单,然后根据所选值进行查询,以便只显示相关的值(在本例中基于年份)。
任何帮助将非常感激,谢谢。
既然你要返回一个包含Bdgfixmonths
列表的模型,那么最好创建一个视图模型,如下所示:
public class BdgfixmonthsViewModel
{
public List<Bdgfixmonth> Bdgfixmonths { get; set; }
public IEnumerable<SelectListItem> Years { get; set; }
}
然后,你的动作方法将改为:
private readonly salesContext _context;
public bdgfixmonthController(salesContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var vm = new BdgfixmonthsViewModel();
var bdgfixmonths = await _context.Bdgfixmonths.ToListAsync();
IEnumerable<SelectListItem> GetAllYears()
{
IEnumerable<SelectListItem> list = _context.Bdgfixmonths
.AsEnumerable()
.Select(s => new SelectListItem
{
Selected = false,
Text = s.Byear.ToString(),
Value = s.Byear.ToString()
});
return list;
}
vm.Years = GetAllYears();
vm.Bdgfixmonths = bdgfixmonths;
return View(vm);
}
你的ViewModel将有两个可以在视图中使用的集合。您将需要更新视图以引用Bdgfixmonth
属性,例如Bdgfixmonths.Bbudget
。此外,模型将更改为如下内容:
@model IEnumerable<Bdgfixmonth>
是
@model BdgfixmonthsViewModel
然后任何迭代代码将更改为:
@foreach (var item in Model.Bdgfixmonths)
{
item.Bbudget
}