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

Razor项目下拉筛选器选择后无筛选效果问题求助

排查项目筛选器失效的问题

让我帮你梳理下代码里可能导致筛选器不工作的几个关键点,咱们一步步来修复:

1. 重复包装SelectList导致的选项值异常

你在控制器里生成项目下拉框的代码有个冗余操作:

var status = db.Projects.Select(m => new SelectListItem { Value = m.ProjectName.ToString(), Text = m.ProjectName }).Distinct().ToList();
ViewBag.Projects = new SelectList(status, "Value", "Text");

这里status已经是SelectListItem的集合了,你又把它传给SelectList构造函数——这相当于把每个SelectListItem的属性再包装一遍,很可能导致实际提交的选项值和预期不符。

修复方案:直接把status赋值给ViewBag.Projects即可:

ViewBag.Projects = status;

2. 参数名大小写的潜在匹配问题

视图里下拉框的name是"Projects"(首字母大写),但控制器Action的参数是string projects(首字母小写)。虽然ASP.NET MVC模型绑定默认不区分大小写,但为了避免潜在的匹配偏差,建议保持两者一致:

  • 要么修改视图里的下拉框name:
    @Html.DropDownList("projects", (SelectList)ViewBag.Projects, "Please Select a Project...", htmlAttributes: new { @class = "form-control" })
    
  • 要么把控制器参数改成string Projects。

3. 筛选逻辑的精确匹配局限性

你的筛选条件是:

employee = employee.Where(student => student.Projects == projects);

这里要确认两个细节:

  • 数据库中EmployeeTimesheets.Projects字段的值,和下拉框选项的Value(也就是m.ProjectName)是否完全一致?如果存在空格、大小写差异,建议改用不区分大小写的匹配:
    employee = employee.Where(student => student.Projects.Equals(projects, StringComparison.OrdinalIgnoreCase));
    
  • 如果Projects字段存储的是多项目值(比如逗号分隔),精确匹配就会失效,需要改成包含匹配:
    employee = employee.Where(student => student.Projects.Contains(projects));
    

4. 初始查询的过滤范围限制

你初始查询写了:

var employee = db.EmployeeTimesheets.Where(student => student.Projects != null);

这会直接排除所有Projects为null的记录。如果用户未选择项目时想展示所有记录(包括Projects为null的),应该把这部分过滤逻辑移到项目筛选的分支里:

var employee = db.EmployeeTimesheets.AsQueryable(); // 先获取全量记录
if (!string.IsNullOrEmpty(projects)) {
    employee = employee.Where(student => student.Projects == projects);
}
// 其他筛选逻辑...

把这些点逐一检查修复后,你的项目筛选器应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:53:56