You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 5 MVC中使用EF Core从数据库生成下拉列表的报错求助

问题根因

你触发报错的核心原因是:控制器返回给视图的模型是IEnumerable<Bdgfixmonth>集合类型,但你在视图中直接调用Model.Years,集合类型本身没有定义Years属性,只有单个Bdgfixmonth实体才有该属性,因此触发了编译错误。

修复方案

按以下步骤调整即可同时满足下拉框填充、按年份筛选的需求:

1. 新增视图模型

不要直接用数据库实体类作为视图模型,新增专门的视图模型承载下拉框选项、筛选值、展示数据三类内容:

public class BdgfixmonthViewModel
{
    // 存储用户选中的年份
    public int? SelectedYear { get; set; }
    // 下拉框用的年份选项列表
    public IEnumerable<SelectListItem> Years { get; set; }
    // 展示用的业务数据列表
    public IEnumerable<Bdgfixmonth> Bdgfixmonths { get; set; }
}

注意:可以删除原Bdgfixmonth实体类中的Years属性,数据库实体不需要承载视图相关的字段,避免EF Core映射报错。


2. 调整控制器Index方法

改造后支持首次加载全量数据、选中年份后筛选数据的逻辑:

public async Task<IActionResult> Index(int? selectedYear)
{
    // 查询所有年份并去重,避免下拉框出现重复选项
    var allYears = await _context.Bdgfixmonths
        .Select(x => x.Byear)
        .Distinct()
        .ToListAsync();
    
    // 构造下拉框选项,选中值与传入的筛选值同步
    var yearOptions = allYears.Select(y => new SelectListItem
    {
        Text = y.ToString(),
        Value = y.ToString(),
        Selected = y == selectedYear
    });
    
    // 按选中年份筛选数据,无选中值则返回全量
    var dataQuery = _context.Bdgfixmonths.AsQueryable();
    if (selectedYear.HasValue)
    {
        dataQuery = dataQuery.Where(x => x.Byear == selectedYear.Value);
    }
    var dataList = await dataQuery.ToListAsync();
    
    // 组装视图模型返回
    var viewModel = new BdgfixmonthViewModel
    {
        SelectedYear = selectedYear,
        Years = yearOptions,
        Bdgfixmonths = dataList
    };
    return View(viewModel);
}

3. 调整视图代码

首先在视图顶部指定绑定的模型类型,再修改下拉框逻辑,增加筛选提交入口:

@* 顶部声明绑定的视图模型 *@
@model BdgfixmonthViewModel

@* 下拉框包裹在表单中,选中后提交即可触发筛选 *@
<form asp-action="Index" method="get">
    @Html.DropDownListFor(m => m.SelectedYear, Model.Years, "-- Select year --")
    <button type="submit">查询</button>
</form>

@* 下方展示筛选后的业务数据 *@
@foreach (var item in Model.Bdgfixmonths)
{
    <div>
        年份:@item.Byear 月份:@item.Bmonth 预算:@item.Bbudget
    </div>
}

内容的提问来源于stack exchange,提问作者chdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:24:02