MVC 5项目中如何为数据库查询添加日期范围筛选功能
你需要分别修改前端View和后端Controller的代码,步骤如下:
1 前端View代码修改
主要调整DataTable的columnFilter配置,匹配你实际的8列结构,给最后一列日期字段启用日期范围筛选,只需要替换原有columnFilter部分即可:
}).columnFilter({ "aoColumns": [ null, // 第0列id:隐藏,无需筛选 { "type": "text" }, // 第1列Citizenic Request:文本筛选 { "type": "select" }, // 第2列User:下拉筛选 { "type": "text" }, // 第3列System Name:文本筛选 { "type": "text" }, // 第4列Strrequest By User:文本筛选 null, // 第5列API Name:无需筛选 null, // 第6列Message:无需筛选 { "type": "date-range" } // 第7列Date:启用日期范围筛选 ] });
修改后日期列头部会出现两个日期选择框,选择范围后请求会自动携带日期参数到后端。
2 后端Controller代码修改
首先引入需要的命名空间:
using System.Globalization;
然后在Tables方法的原有全局搜索逻辑之后,新增日期范围过滤逻辑:
// 原有搜索逻辑 if (!string.IsNullOrEmpty(searchValue)) { customerData = customerData.Where(m => (m.citizenic_request == searchValue) || (m.strrequest_byuser == searchValue) || (m.api_request == searchValue)); } // ========== 新增日期范围筛选逻辑开始 ========== // 获取第7列(日期列)的搜索参数 var dateSearchVal = Request.Form.GetValues("columns[7][search][value]").FirstOrDefault(); if (!string.IsNullOrWhiteSpace(dateSearchVal)) { // 按columnFilter默认的~分隔符拆分起止日期 var dateRange = dateSearchVal.Split('~', StringSplitOptions.RemoveEmptyEntries); if (dateRange.Length == 2) { // 匹配前端返回的MM/dd/yyyy日期格式 if (DateTime.TryParseExact(dateRange[0].Trim(), "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDt)) { customerData = customerData.Where(x => x.createdAt >= startDt); } if (DateTime.TryParseExact(dateRange[1].Trim(), "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime endDt)) { // 结束日期加1天,避免createdAt的时间部分导致当天数据被过滤 customerData = customerData.Where(x => x.createdAt < endDt.AddDays(1)); } } } // ========== 新增日期范围筛选逻辑结束 ========== // 原有统计分页逻辑 recordsTotal = customerData.Count();
注意事项
- 如果测试发现日期参数分隔符不是~,可以断点查看
dateSearchVal的实际值,调整Split方法的分隔符参数即可 - 如果你的数据库
createdAt字段存储的是UTC时间,可根据业务需要调整时区偏移逻辑 - 日期解析失败的情况下会自动跳过日期筛选,不影响原有功能使用
内容的提问来源于stack exchange,提问作者Pacharanut
相关产品推荐
相关产品推荐

