在ASP中使用实体框架核心创建数据库下拉列表.. NET Core 5 MVC应用



在我的应用程序中,我试图通过从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
}

相关内容

  • 没有找到相关文章

最新更新