首页 > 解决方案 > 在 ASP.NET Core MVC 的 PaginatedList 的下一页上保留来自 HttpPost 的过滤器

问题描述

我正在创建一个程序,其中有一个包含要过滤的记录的数据库。过滤器有 4 个输入 type="text" 并根据我输入的过滤器返回正确的记录。问题是,当我单击下一页链接(分页列表)时,第二页没有调整过滤器。它失去了我给的过滤器。我知道我必须在 Next Page 链接上给 asp-route 提供一些变量以及过滤器中给出的数据,比如 Microsoft Tutorial 给出 currentFilter,但我有 4 个这样的过滤器:Name=x&Phone=y&...

这是我的控制器代码简单化:

 public  async Task<IActionResult> Index( some variables ){ 

   var appusers = from a in _context.AppUsers
                           select a;

   return(return View(await app.PaginatedList<AppUser>.CreateAsync(appusers.AsNoTracking(), pageNumber ?? 1, pageSize));)
}


AND

[HttpPost]
public async Task<IActionResult> Index(string Name, string Phone, string Calls, string Date){
       
              var ap = from c in _context.AppUsers
                     select c;
              Filter The database based on variable values Name,Phone,Calls,Date

              return View(await PushNotificationApp.PaginatedList<AppUser>.CreateAsync(ap.AsNoTracking(), 
               pageNumber?? 1, pageSize));}

这是索引的一部分:

 @using (Html.BeginForm("Index", "AppUsers", new { id = "filterForm" }))
        {
 name="SearchTrips" value="@ViewData["CurrentTrips"]" />

                <input id="NameFilterField" type="text" name="Name" />
                <input id="PhoneFilterField" type="text" name="Phone" />
                <input id="CallsFilterField" type="text" name="Calls" />
                <input id="DateFilterField" type="text" pattern="\d{1,2}/\d{1,2}/\d{4}" name="Date" />
           

            <button class="m-3" type="submit" value="submit">Search</button>

        }

AND PAGELIST LINK PART :
 <div class="p-2 bd-highlight">
                        <nav aria-label="Page navigation example">
                            <ul class="pagination">
                                <li class="page-item">
                                    <a class="page-link MainButton" asp-action="Index"
                                       asp-route-pageNumber="@(Model.PageIndex - 1)"
                                       asp-route-currentFilter="@ViewData["CurrentFilter"]"       
                                       class="page-link @prevDisabled">
                                        Previous
                                    </a>
                                </li>

                                <li class="page-item">
                                    <a class="page-link MainButton" asp-action="Index"
                                       asp-route-pageNumber="@(Model.PageIndex + 1)"
                                       asp-route-currentFilter="@ViewData["CurrentFilter"]"                         
                                        Next
                                    </a>
                                </li>
                            </ul>
                        </nav>
                    </div>

标签: asp.netasp.net-mvcentity-frameworkasp.net-core

解决方案


问题是,当我单击下一页链接(分页列表)时,第二页没有调整过滤器。它失去了我给的过滤器。

您正在Post操作中进行过滤,但是当您单击“下一步”链接时,它将转到Get未过滤的操作。所以,我认为你可以让表单做一个 get 请求,然后在 Get 方法中做过滤器。

我知道我必须在 Next Page 链接上给 asp-route 提供一些变量以及过滤器中给出的数据,比如 Microsoft Tutorial 给出 currentFilter,但我有 4 个这样的过滤器:Name=x&Phone=y&...

4个过滤器是一样的,只是把其他过滤器参数给Next链接

<a class="page-link MainButton" asp-action="Index"
   asp-route-pageNumber="@(Model.PageIndex + 1)"
   asp-route-Name="@ViewData["Name"]"
   asp-route-Phone="@ViewData["Phone"]"
   asp-route-Calls="@ViewData["Calls"]"
   asp-route-Date="@ViewData["Date"]"
   Next
</a>

推荐阅读