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
相关产品推荐
相关产品推荐

