با سلام
من صفحه بندی رو انجام دادم ولی مشکل اینجاس در برخی از جداول من بالای 10 هزار رکورد هست
زمانی که رکوردها کم هستن
ولی شما تصور کن که در صفحه 415 تا از Paging داشته باشی که دردسر شده واقعا برام
اگر ممکنه دوستان کمک کنن که در هر صفحه 10 شماره وجود داشته باشه که با زدن روی بعدی 10 تای بعدی رو بیاره مثل این
کد هایی که استفاده کردم :
@{
if (ViewBag.PageCount > 1)
{
<div class="row text-center">
<nav aria-label="Page navigation">
<ul class="pagination">
@if ((int)ViewBag.PageID > 1)
{
<li><a asp-area="HumanResources" asp-controller="Settings" asp-action="GetOrgPost" asp-route-Page="@((int)ViewBag.PageID-1)">«</a></li>
}
@for (int i = 1; i <= (ViewBag.PageCount); i++)
{
<li class="@(((int)ViewBag.PageID==i)?" active":"")">
<a asp-area="HumanResources" asp-controller="Settings" asp-action="GetOrgPost" asp-route-Page=@i>
@i
<span class="sr-only"></span>
</a>
</li>
}
@if ((int)ViewBag.PageID <= (int)ViewBag.PageCount - 1)
{
<li><a asp-area="HumanResources" asp-controller="Settings" asp-action="GetOrgPost" asp-route-Page="@((int)ViewBag.PageID+1)">»</a></li>
}
</ul>
</nav>
</div>
}
}
ببینید برای ایجاد صفحه بندی در Asp.net Core چندتا کتابخانه وجود داره که میتونید توسط اونها این کار رو انجام بدید. اما خب بدون استفاده از کتابخانه هم میشه این کار رو انجام داد. البته شما در متن سوال مشخص نکردید از چه کتابخانه ای برای ایجاد صفحه بندی استفاده کردید ولی خب احتمالا از کتابخانه ReflectionIT.Mvc.Paging استفاده کردید. در ادامه یک روش برای ایجاد صفحه بندی رو بهتون آموزش میدم که از همین کتابخانه استفاده شده ولی کمی شخصی سازی شده و کاربردی تر.
در ابتدا بهتون بگم که کاری که در انتهای انجام میشه چیزی تقریبا مشابه با همین صفحه بندی هست که در سایت Porsnet.ir استفاده شده.
مراحل ایجاد صفحه بندی در Asp.net Core
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
خب تا اینجا پیش نیازها آماده است.
@model ReflectionIT.Mvc.Paging.IPagingList
@* Fake Boostrap 5 based pager *@
@{
var start = this.Model.StartPageIndex;
var stop = this.Model.StopPageIndex;
}
<style>
.pagination > li > a, .pagination > li > span {
margin-left: 5px !important;
border-radius: 8px;
}
.pagination > li:first-child > a, .pagination-sm > li:last-child > a {
border-radius: 8px;
}
</style>
@if (this.Model.PageCount > 1)
{
<ul class="pagination pagination-sm justify-content-end" id="pagerUl">
@if (start > 1)
{
<li class="page-item myli">
<a href="@Url.Action(Model.Action, Model.GetRouteValueForPage(1))" aria-label="First" class="page-link">
<span aria-hidden="true">ابتدا</span>
</a>
</li>
}
@if (this.Model.PageIndex > 1)
{
<li class="page-item">
<a href="@Url.Action(Model.Action, Model.GetRouteValueForPage(this.Model.PageIndex - 1))" aria-label="Previous" class="page-link">
<span aria-hidden="true">></span>
@* « *@
</a>
</li>
}
@for (int i = start; i <= stop; i++)
{
<li class="page-item @((Model.PageIndex == i) ? "active" : null)">
@if (i == 1)
{
@Html.ActionLink("1", Model.Action, Model.GetRouteValueForPage(i), new { @class = "page-link" })
}
else
{
@Html.ActionLink(i.ToString(), Model.Action, Model.GetRouteValueForPage(i), new { @class = "page-link" })
}
</li>
}
@if (this.Model.PageIndex < this.Model.PageCount)
{
<li class="page-item">
<a href="@Url.Action(Model.Action, Model.GetRouteValueForPage(this.Model.PageIndex + 1))" aria-label="Next" class="page-link">
<span aria-hidden="true"><</span>
@* » *@
</a>
</li>
}
@if (stop < this.Model.PageCount)
{
<li class="page-item">
<a href="@Url.Action(Model.Action, Model.GetRouteValueForPage(this.Model.PageCount))" aria-label="Last" class="page-link">
<span aria-hidden="true">انتها</span>
</a>
</li>
}
</ul>
}
//Pager
services.AddPaging(options =>
{
options.ViewName = "Bootstrap5";
options.HtmlIndicatorDown = " <span>↓</span>";
options.HtmlIndicatorUp = " <span>↑</span>";
});
public class HomeController : Controller
{
private readonly DbContext _db;
public HomeController(DbContext db)
{
_db = db;
}
public IActionResult Index(int page = 1)
{
var model = PagingList.Create(_db.Customer_Tbl.ToList(), 30, page);
return View(model);
}
}
خب کدهای بالا تقریبا واضح هستن. متد Index در اینجا دارای یک آرگومان به نام Page هست که مقدار پیش فرضش 1 هست. این آرگومان شماره صفحه رو مشخص میکنه. برای اولین بار شماره صفحه 1 رو نمایش میده. همچنین در متغیر model هم مشخص کردیم که هر صفحه 30 تا رکورد نمایش بده. این مقدار رو میتونید به دلخواه تغییر بدید.
@model IEnumerable<Models>
@using ReflectionIT.Mvc.Paging
<div class="table-responsive row">
<table class="table">
<thead>
<tr>
<td>ردیف</td>
<td>نام مشتری</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr style="font-size:12px;">
<td>@counter</td>
<td>@item.CustomerName</td>
</tr>
}
</tbody>
</table>
<nav class="pagenav" style="text-align:center;">
@await this.Component.InvokeAsync("Pager", new { PagingList = this.Model })
</nav>
</div>
خب حالا اگر پروژه رو اجرا کنید و اطلاتی که از سمت دیتابیس میاد بیشتر از 30 تا رکورد باشه باید به صورت صفحه بندی شده نمایش داده بشه. ضمنا اگر تعداد رکوردهای شما خیلی زیاد باشه فقط 5...6 تا دکمه نمایش میده و میتونید توسط دکمه های ابتدا و انتها بین رکوردها جابجا بشید.
امیدوارم تونسته باشم در مورد ایجاد صفحه بندی (Paging) در Asp.net Core بهتون کمک کرده باشم.
مرسی عالی بود . مشکل کاملا رفع شد . ❤
آموزش کامل و جامعی بود ... مثل همیشه خیلی ممنون
سلام من همین راه رو رفتم ولی چرا وقتی میخوام برم به مثلا صفحه دوم نمیره
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
48
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
87
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1346
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
204
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
115
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
393
- پاسخ :
2
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
48
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
87
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1346
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1156
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
594
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
204
- پاسخ :
1
|