ASP.NET通过CheckBox切换全量/近6个月数据筛选功能异常求助
解决方案
原问题根因
- 复选框状态丢失:页面刷新后没有将当前选中状态回传给前端渲染,每次刷新都会回到默认未勾选状态。
- 过滤逻辑失效:你使用
string[]类型接收单个复选框参数,同时分页组件会保留历史查询参数,一旦勾选过一次后,后续所有请求都会携带datefilter参数,导致datefilter == null的判断永远不成立,日期过滤逻辑不会执行。
代码修改步骤
1. 调整Controller逻辑
- 将接收参数从
string[] datefilter改为bool dateFilter = false,单个复选框无需用数组接收,默认值false对应未勾选的默认状态 - 将日期计算修正为最近6个月
- 调整过滤判断逻辑
- 将复选框状态存入ViewBag回传给前端
修改后代码如下:
public ActionResult Index(bool dateFilter = false, string SearchString, string sortOrder, int? page) { // 修正为最近6个月过滤节点 DateTime filterDate = DateTime.Now.AddMonths(-6); var PatientID = from p in db.PatientTbls select p; // 未勾选全量展示时执行日期过滤 if (!dateFilter) { PatientID = PatientID.Where(s => s.CreationDate >= filterDate); } PatientID = PatientID.OrderByDescending(s => s.CreationDate); if (!String.IsNullOrEmpty(SearchString)) { PatientID = PatientID.Where(s => s.ReadOnModel.Contains(SearchString) || s.ToBeMarkedOnLaser.Contains(SearchString) || s.Brand.Contains(SearchString)); } // 回传选中状态到视图用于渲染 ViewBag.DateFilter = dateFilter; return View(PatientID.ToList().ToPagedList(page ?? 1, 150)); }
2. 调整前端HTML代码
给复选框添加value属性和动态选中状态判断,Razor视图代码如下:
<input type="checkbox" name="dateFilter" class="form-check-input" onChange="this.form.submit()" value="true" @(ViewBag.DateFilter ? "checked" : "")> Display All Time Data
补充说明
如果你的视图不是Razor,也可以通过前端JS读取URL参数的方式给复选框赋值,逻辑一致:读取dateFilter参数值,为true时给复选框添加checked属性即可。
内容的提问来源于stack exchange,提问作者Dimebeg
相关产品推荐
相关产品推荐

