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

.NET5 ASP Razor Pages Post提交后BindProperties绑定的筛选值丢失

问题解决方法

核心问题原因

你遇到的筛选条件丢失问题核心原因非常明确:视图中的输入框没有绑定PageModel属性的回填值。

你已经加了[BindProperties]特性,提交表单时UserNameFilter已经成功绑定到你输入的值,OnPost方法执行完成后这个属性是有正确值的,只是渲染视图时没有把这个值写到输入框的value属性中,所以看起来像丢失了。而UserInfos是你主动在视图中遍历输出的,所以能正常显示。

最快修复方案

把UserList.cshtml里的输入行替换成下面的代码即可:

<input type="text" asp-for="UserNameFilter" />

asp-for是Razor Pages自带的TagHelper,会自动完成3件事:

  1. 生成正确的name、id属性,保证模型绑定正常
  2. 自动把Model.UserNameFilter的值回填到输入框的value属性
  3. 自动适配数据验证规则(后续加验证不需要改视图)

额外优化建议

  1. 筛选功能优先使用GET请求而非POST:
    把表单的method="post"改成method="get",然后把OnPost里的逻辑合并到OnGet中,代码如下:
    public void OnGet()
    {
        var userInfoFilter = new UserInfoFilter
        {
            UserName = UserNameFilter
        };
        UserInfos = _userService.GetUserInfoList(userInfoFilter).ToList();
    }
    
    用GET的好处是筛选参数会出现在URL中,用户可以收藏筛选后的页面,刷新、回退都不会出现表单重复提交的提示,更符合筛选场景的最佳实践。
  2. 不要在列表页展示用户密码明文,属于严重的安全漏洞,建议直接删除密码列。
  3. 你之前查阅的TempData不适用于这个场景,TempData是用于跨请求传递数据(比如Redirect跳转后传提示信息),你这个是同一次请求内渲染视图,完全不需要用到。

内容的提问来源于stack exchange,提问作者Cedric Royer-Bertrand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:15:03