如何在.NET Core Razor页面提交后保留模型筛选值
解决Razor页面提交模态框后筛选控件重置的问题
问题核心是提交新建记录后重定向回Index页面时,没有携带之前的筛选参数,导致筛选控件回到初始状态。以下是具体解决方案:
1. 重定向时传递筛选参数
修改模态框的Post处理方法,在重定向时将当前所有筛选参数(如Division)一并传递,确保OnGetAsync能获取到之前的筛选值:
public async Task<IActionResult> OnPostCreateNewRecordAsync(GasProject gasProject) { if (!ModelState.IsValid) { // ModelState无效时,重新初始化下拉框并保留筛选状态 await InitializeSelectLists(); GasProjects = await QueryProjects(); return Page(); } // 执行保存逻辑 _context.GasProjects.Add(gasProject); await _context.SaveChangesAsync(); // 重定向时携带所有筛选参数 return RedirectToPage("Index", new { Division = Division, // 如果有其他筛选参数(如OpCo、Municipality),一并添加在此 }); }
2. 复用下拉框初始化逻辑
为避免重复代码,新增初始化SelectList的私有方法,同时确保所有筛选参数都标记为[BindProperty(SupportsGet = true)],让OnGetAsync自动绑定查询字符串中的参数:
public class IndexModel : PageModel { public SelectList? Divisions { get; set; } public SelectList? OpCos { get; set; } public SelectList? Municipalities { get; set; } public SelectList? DesignPhases { get; set; } public SelectList? Designers { get; set; } [BindProperty(SupportsGet = true)] public string? Division { get; set; } [BindProperty(SupportsGet = true)] public string? OpCo { get; set; } // 其他筛选参数同理添加BindProperty标记 private async Task InitializeSelectLists() { // 初始化Division下拉框 var divisionQuery = from m in _context.GasProjects where !string.IsNullOrEmpty(m.Division) orderby m.Division select m.Division; Divisions = new SelectList(await divisionQuery.Distinct().ToListAsync(), Division); // 初始化OpCo下拉框(示例) var opCoQuery = from m in _context.GasProjects where !string.IsNullOrEmpty(m.OpCo) orderby m.OpCo select m.OpCo; OpCos = new SelectList(await opCoQuery.Distinct().ToListAsync(), OpCo); // 其他下拉框同理初始化 } public async Task OnGetAsync() { await InitializeSelectLists(); GasProjects = await QueryProjects(); } }
3. 处理ModelState无效的场景
当表单验证失败返回Page()时,不会自动触发OnGetAsync,因此需要手动调用InitializeSelectLists()重新生成下拉框选项,并保留当前筛选参数,确保页面渲染时筛选控件状态正确。
补充说明
- .NET Core Razor Pages没有ViewState,所以依赖ViewState的方案不可行。
- 服务器端传递参数的方案比JavaScript本地存储更可靠,即使客户端禁用JS也能正常工作。
内容的提问来源于stack exchange,提问作者HarpuaMM
相关产品推荐
相关产品推荐

