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

筛选/排序后如何让PagedList分页不重置为第1页并停留在当前页

问题原因

你遇到的分页重置问题有两个核心诱因:

  • 筛选/排序提交的表单没有携带当前页码参数,控制器接收的page值为null,触发默认赋值为1的逻辑
  • 控制器GetTableData方法中存在searchString不为空就强制重置页码为1的代码,和需求冲突

修改方案

1. 视图层调整

在筛选表单内新增隐藏域,用于传递当前页码,确保提交排序/筛选请求时可以保留当前页号:

@using (Html.BeginForm("GetTableData", "ProductSearchBlock", FormMethod.Get))
{
    <!-- 新增隐藏域传递当前页码 -->
    <input type="hidden" name="page" value="@Model.PageNumber" />
    
    <!-- 原有表单内容保持不变 -->
    <span>Order By</span>
    <select id="orderBySelect" name="orderBy" aria-hidden="true">
        @*原有下拉选项逻辑*@
    </select>
    @*其余表单元素代码省略*@
}

2. 控制器层调整

根据你的需求修改GetTableData的页码处理逻辑:

若需求为「排序、筛选操作都保留当前页码」,直接删除强制重置页码的代码即可:

public ActionResult GetTableData(string searchString, string orderBy, int? page)
{
    if (searchString == null && orderBy == null)
    {
        return Redirect(PageHelper.CurrentPageUrl());
    }

    // 删除下面这段强制重置页码的逻辑
    // if (searchString != null)
    // {
    //     page = 1;
    // }

    int pageNumber = page ?? 1;

    var orderByQuery = UriUtil.AddQueryString(PageHelper.CurrentPageUrl(), RequestQueryConstants.OrderBy, orderBy.ToString());
    var SearchStringQuery = UriUtil.AddQueryString(orderByQuery, RequestQueryConstants.SearchString, searchString);
    var finalUrl = UriUtil.AddQueryString(SearchStringQuery, RequestQueryConstants.PageNumber, pageNumber.ToString());

    return Redirect(finalUrl);
}

若需求为「仅排序保留页码,搜索关键词变更时仍跳转到第1页」,可以新增关键词变更判断逻辑:

你可以在表单中再加一个隐藏域存原有搜索词,提交到控制器后对比,如果搜索词发生变化再重置页码,否则保留当前页码即可。

可选兜底优化

如果筛选后总页数小于当前页码,会出现空页问题,可以在Index方法中加一层页码合法性校验:

// 调用ToPagedList之前添加校验逻辑
int pageSize = 2;
int totalCount = productsResult.Count;
int maxPage = (int)Math.Ceiling(totalCount / (double)pageSize);
int parsedPage = int.Parse(pageNumber);
// 页码超过总页数时自动跳转到最后一页
if (parsedPage > maxPage && maxPage > 0)
{
    parsedPage = maxPage;
}
viewModel.Products = productsResult.ToPagedList(parsedPage, pageSize);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:24:03