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

ASP.NET 6 MVC如何通过枚举下拉列表筛选博客文章状态

解决ASP.NET 6 MVC枚举下拉列表筛选博客文章问题

确认枚举定义

先确保你的枚举结构正确,示例:

public enum ReadyStatus
{
    Draft = 0,
    Review = 1,
    ProductionReady = 2
}

修正视图下拉列表绑定

视图中使用官方内置方法生成枚举下拉列表,确保提交值与枚举索引匹配:

<!-- Tag Helper写法 -->
<select asp-for="SelectedStatus" asp-items="Html.GetEnumSelectList<ReadyStatus>()">
    <option value="">全部状态</option>
</select>

ViewModel需添加对应属性,支持空值以兼容“全部”选项:

public int? SelectedStatus { get; set; }
// 或直接用枚举可空类型:public ReadyStatus? SelectedStatus { get; set; }

控制器筛选逻辑修复

方案1:接收int类型筛选值

直接对比模型存储的枚举索引值:

public IActionResult Index(int? selectedStatus)
{
    var blogQuery = _context.Blogs.AsQueryable();

    if (selectedStatus.HasValue)
    {
        // 直接匹配模型中存储的int类型索引值
        blogQuery = blogQuery.Where(b => b.ReadyStatus == selectedStatus.Value);
    }

    return View(blogQuery.ToList());
}

方案2:接收枚举类型筛选值

若ViewModel用ReadyStatus?,转成int后对比:

public IActionResult Index(ReadyStatus? selectedStatus)
{
    var blogQuery = _context.Blogs.AsQueryable();

    if (selectedStatus.HasValue)
    {
        blogQuery = blogQuery.Where(b => b.ReadyStatus == (int)selectedStatus.Value);
    }

    return View(blogQuery.ToList());
}

排查要点

  • 控制器加断点,确认selectedStatus参数值与选中的枚举索引一致
  • 检查文章模型的ReadyStatus属性是否为int类型,与枚举索引类型匹配
  • 若用字符串提交,转换枚举时开启大小写忽略:Enum.Parse(typeof(ReadyStatus), statusStr, ignoreCase: true)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:21