【发布时间】:2018-08-26 02:39:44
【问题描述】:
我想实现一个简单的分页,PagedList.MVC NuGet 包对我来说听起来是最好的解决方案。但是,当我单击生成的按钮转到第二、第三等页面时,第一个仍然处于活动状态,所发生的只是刷新第一页,但我显然希望它导航到预期的页面...... 我按照这两个教程来看看我是否做对了所有事情:
我的控制器:
public ActionResult Index(int? pageNumber)
{
var modelList = _employeeService.GetEmployeeViewToPagedList(pageNumber);
return View(modelList);
}
被调用的服务方法(我知道“ToPagedList()”通常是从控制器调用的,但当前状态是尝试一切的结果,如果我修改,我会得到“DbContext 处理”错误从控制器返回类似“View(modelList.ToPagedList(pageNumber, pageSize))”的内容):
public IPagedList<EmployeeView> GetEmployeeViewToPagedList(int? pageNumber)
{
using (var _unitOfWork = UnitOfWork.GetUnitOfWork())
{
var list = (IQueryable<EmployeeView>)_unitOfWork.context.EmployeeViews.OrderByDescending(x => x.Id);
return list.ToPagedList((pageNumber ?? 1), 10);
}
}
我的看法:
@model PagedList.IPagedList<Company.DAL.Views.EmployeeView>
@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
@{
ViewBag.Title = "Index";
}
<h2>List of all employees</h2>
<p>
@Html.ActionLink("Add new employee", "AddNewEmployee")
</p>
@if (Model != null && Model.Count() > 0)
{
<table class="table">
... all needed <tr>'s, <th>'s, <td>'s ...
</table>
<br/>
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, pageSize =
Model.PageSize }))
}
这几天我一直在尝试解决这个问题,我得到的最接近的是this question,但我不确定在哪里可以找到那个 JS 函数,所以我也可以尝试一下。
编辑: 生成的 HTML:
<div class="pagination-container">
<ul class="pagination">
<li class="active"><a>1</a></li>
<li><a href="/Play?page=2&pageSize=3">2</a></li>
<li><a href="/Play?page=3&pageSize=3">3</a></li>
<li class="PagedList-skipToNext"><a href="/Play?page=2&pageSize=3" rel="next">»</a></li>
</ul>
</div>
【问题讨论】:
-
您显示的代码应该可以正常工作。为您的页码链接生成的实际 html 是什么?
-
@StephenMuecke 查看上面生成的 HTML。
-
从
@Html.PagedListPager(...)中删除pageSize = Model.PageSize -
@StephenMuecke 我希望这能奏效,但至少我的网址现在看起来好多了。
-
@AlexiAmni 我发现了我的错误,这是一个愚蠢的错误,但我花了比我想承认的更多的时间。我的控制器中的索引方法接受一个名为“pagedNumber”的 int 变量,但在我的 Razor 视图中,我从辅助方法传递了一个名为“page”的变量。它们必须具有相同的名称!
标签: c# asp.net .net asp.net-mvc pagedlist