我的表中有大约 2000 条记录。所以我需要在我看来使用分页。这是我的操作代码:
public ActionResult Index(string SearchBy, String Search , int PageId=1)
{
int skip = (PageId - 1) * 15;
int count = db.Persons.Count();
ViewBag.PageID = PageId;
ViewBag.PageCount = count/15;
int Ser = 0;
bool result = int.TryParse(Search, out Ser);
if (SearchBy == "Code" && result == true)
{
return View(db.Persons.Where(x => x.Pcode == Ser || Search == null).OrderBy(x=>x.Pcode).Skip(skip).Take(15));
}
else
{
return View(db.Persons.Where(x => x.Family.Contains(Search) || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
}
}
这是我在视图中分页的代码:
<div class="row text-center">
<nav>
<ul class="pagination">
<li class="disabled"><a aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
@for (int i = 1; i <= (ViewBag.PageCount + 1); i++)
{
<li class="@(((int)ViewBag.PageID==i)?"active":"")"><a href="/Person /Index?pageid=@i">@i<span class="sr-only">(current)</span></a></li>
}
<li><a aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
问题是,当我运行它时,我会看到所有页码,需要将页码限制为页面中的 10 个数字。
答案 0 :(得分:0)
我一直在努力,最后代码正常了!!! 这是我的操作代码
public ActionResult Index(int totalItems, string SearchBy, String Search, int PageId = 1)
{
int skip = (PageId - 1) * 15;
var totalPages = db.Persons.Count() / 15;
var currentPage = PageId != null ? (int)PageId : 1;
var startPage = currentPage - 5;
var endPage = currentPage + 4;
if (startPage <= 0)
{
endPage -= (startPage - 1);
startPage = 1;
}
if (endPage > totalPages)
{
endPage = totalPages;
if (endPage > 10)
{
startPage = endPage - 9;
}
}
ViewBag.TotalItems = totalItems;
ViewBag.CurrentPage = currentPage;
ViewBag.TotalPages = totalPages;
ViewBag.StartPage = startPage;
ViewBag.EndPage = endPage;
int Ser = 0;
bool result = int.TryParse(Search, out Ser);
if (SearchBy == "Code" && result == true)
{
return View(db.Persons.Where(x => x.Pcode == Ser || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
}
else
{
return View(db.Persons.Where(x => x.Family.Contains(Search) || Search == null).OrderBy(x => x.Pcode).Skip(skip).Take(15));
}
}
这是我的代码
<div style="align-content:center">
@if (ViewBag.EndPage > 1)
{
<ul class="pagination">
@if (ViewBag.CurrentPage > 1)
{
<li>
<a class="page-link" href="/Person/Index">First</a>
</li>
<li class="page-item"><a class="page-link" href="/Person/Index?pageid=@(ViewBag.CurrentPage - 1)">Previous</a></li>
}
@for (var i = ViewBag.StartPage; i <= ViewBag.EndPage; i++)
{
<li class="@(((int)ViewBag.CurrentPage==i)?"active":"")">
<a class="page-link" href="/Person/Index?pageid=@i">
@i
<span class="sr-only">(current)</span>
</a>
</li>
}
@if (ViewBag.CurrentPage < ViewBag.TotalPages)
{
<li class="page-item"><a class="page-link" href="/Person/Index?pageid=@(ViewBag.CurrentPage + 1)">Next</a></li>
<li>
<a class="page-link" href="/Person/Index?pageid=@(ViewBag.TotalPages)">Last</a>
</li>
}
</ul>
}
</div>