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

ASP.NET MVC中更改表格每页显示条数后搜索结果重置问题

问题排查:搜索后切换每页条数丢失过滤条件

我帮你定位到问题根源了:当你通过下拉列表切换每页条数时,提交的pageSizeForm表单里没有携带当前的搜索过滤参数。控制器接收不到之前的搜索关键词,就会重置过滤条件,返回所有用户数据。

具体修复步骤

1. 给pageSizeForm添加状态保留的隐藏字段

修改视图里的分页表单,把当前的搜索过滤值和排序规则通过隐藏字段一起提交,确保切换页大小时这些状态不会丢失:

@using (Html.BeginForm("Index", "Users", FormMethod.Get, new { id = "pageSizeForm" }))
{
    <!-- 添加隐藏字段,保存当前的搜索和排序状态 -->
    @Html.Hidden("currentFilter", ViewBag.CurrentFilter)
    @Html.Hidden("sortOrder", ViewBag.CurrentSort)
    
    <div class="pager">
        Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) sur @Model.PageCount<br/>
        @Model.Count of @Model.TotalItemCount elements
        @Html.PagedListPager(Model, page => Url.Action("Index", new { 
            page, 
            sortOrder = ViewBag.CurrentSort, 
            currentFilter = ViewBag.CurrentFilter, 
            pageSize = ViewBag.psize 
        }))

        <!-- 修正下拉列表的名称,和控制器参数统一,同时指定ID匹配jQuery选择器 -->
        Elements per page : @Html.DropDownList("PageSize", ViewBag.PageSize as List<SelectListItem>, new { id = "pageSize" })
    </div>
}

这里注意:你之前的下拉列表名称是pageSize,但控制器参数是int? PageSize(首字母大写),虽然ASP.NET MVC会自动处理大小写,但统一名称能避免潜在问题,所以改成"PageSize",同时保留id="pageSize"来匹配你的jQuery代码。

2. 优化控制器的下拉列表选中状态(提升用户体验)

目前控制器生成下拉列表时默认选中10,但切换页大小后不会自动选中当前值,修改这部分代码让下拉列表自动匹配当前页大小:

// 先获取当前页大小
int pageSize = (PageSize ?? 10);
ViewBag.psize = pageSize;

// 计算总条数
int count = _db.USER.Count();

// 生成下拉列表时,根据当前pageSize设置选中项
ViewBag.PageSize = new List<SelectListItem>()
{
    new SelectListItem { Text = "10", Value = "10", Selected = pageSize == 10 },
    new SelectListItem { Text = "25", Value = "25", Selected = pageSize == 25 },
    new SelectListItem { Text = "50", Value = "50", Selected = pageSize == 50 },
    new SelectListItem { Text = "100", Value = "100", Selected = pageSize == 100 },
    new SelectListItem { Text = "All", Value = count.ToString(), Selected = pageSize == count }
};

这样用户切换页大小后,下拉列表会自动选中当前的数值,体验更流畅。

3. 验证jQuery逻辑

你的jQuery代码是正确的,只要下拉列表的ID是pageSize(上面已经确保了),这段代码就能正常触发表单提交:

$(function () {
    $("#pageSize").change(function () {
        $("#pageSizeForm").submit();
    });
});

修复原理

当你提交pageSizeForm时,隐藏字段会把currentFilter(当前搜索关键词)和sortOrder(当前排序规则)一起发送到控制器。控制器里的逻辑会用currentFilter来恢复之前的搜索条件,这样切换页大小时就会基于搜索结果分页,而不是重置为全部用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:01:32