با سلام
برای قسمت صفحه بندی میتونید از این استفاده کنید:
namespace Helper.Paging
{
public class PagingInfo
{
public int TotalItems { get; set; }
public int ItemsPerPage { get; set; }
public int CurrentPage { get; set; }
public int TotalPages
{
get
{
return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage);
}
}
}
public static class PagingHelpers
{
public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int,string> pageUrl)
{
var result = new StringBuilder();
for (int i = 1; i <= pagingInfo.TotalPages; i++)
{
var anchor = new TagBuilder("a");
anchor.MergeAttribute("href", pageUrl(i));
anchor.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
{
anchor.AddCssClass("active");
}
var icon = "<i>___</i>";
anchor.InnerHtml = icon;
result.Append(anchor.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
}
}
یک کنترلر احتیاج دارید که صفحه رو بتونه به صورت Get هم بگیره یا اصلا کاربر بدون صفحه میخواد ببینتش:
دوتا متد هم اضافه که ببینه صفحه قبلی موجود هست یا خیر و صفحه بعدی موجود هست یا خیر که دکمه نمایش بده کاربر بزنه بره صفحه بعدی یا قبلی
private GalleryVM GetModule(int? page)
{
var model = new GalleryVM();
var items = _Products.Skip((page.GetValueOrDefault() - 1) * PageSize).Take(PageSize);
model.Products = ConvertToVM(items);
model.PagingInfo = new PagingInfo
{
CurrentPage = page.GetValueOrDefault(),
ItemsPerPage = PageSize,
TotalItems = ProductCount
};
if (HaveNextPage(model.PagingInfo.CurrentPage,model.P agingInfo.TotalPages))
{
if (page<1)
{
page = 1;
}
model.next_page = page + 1;
}
if (HavePrevPage(model.PagingInfo.CurrentPage, model.PagingInfo.TotalPages))
{
model.prev_page = page.GetValueOrDefault() - 1;
}
return model;
}
private bool HavePrevPage(int current,int totalPage)
{
if (current>1)
{
return true;
}
return false;
}
private bool HaveNextPage(int current, int totalPage)
{
if (current<totalPage)
{
return true;
}
return false;
}
یک View هم احتیاج دارید به یک همچین صورتی
@model DomainModel.DashboardVM.GalleryVM
<div id="dvCarpets">
@foreach (var item in Model.Products)
{
<div class="col-sm-4">
<div class="col-xs-4 col-sm-6 nopadding carpet-leftside">
<a href="@Url.Action("Index","Single",new { url = item.Link })" aria-label="@item.CarpetID">
<picture>
<source class="img-gallery" srcset="@Url.Content(item.ImageWebpSmall)" type="image/webp" alt="@item.Alt" />
<img class="img-gallery" src="@Url.Content(item.ImageJPGSmall)" alt="@item.Alt">
</picture>
</a>
<p class="golden table specification-padding">
ID :
<span class="white cell">@item.CarpetID</span>
<a class="cell" href="@Url.Action("Index","Single",new { url = item.Link })">Carpet Spec</a>
</p>
</div>
<div class="col-sm-6 hidden-xs hidden-sm nopadding gallery-detail-side">
<article class="gallery gallery-font">
<ul>
<li>Size: @item.SizeX X @item.SizeY CM</li>
<li>Materials: @item.Silk% Silk & @item.Wool% Wool</li>
</ul>
</article>
</div>
</div>
}
</div>
@if (Model.prev_page >= 1)
{
<a href="@Url.Action("Index",new { page = Model.prev_page })" aria-label="Previous" class="prevBig" id="prev"><svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#arrow-left"></use>
</svg></a>
}
@if (Model.next_page != null)
{
<a href="@Url.Action("Index",new { page = Model.next_page })" aria-label="Next" class="nextBig" id="next"><svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#arrow-right"></use>
</svg></a>
}
<a id="view_carousel" aria-label="Carousel View Mode" class="dw-right" href="javascript:void(0);">
<svg class="social-icon">
<use xlink:href="@Url.Content("~/Content/sprite.svg")#view-carousel"></use>
</svg>
</a>
<div class="LinkBuilding">
@Html.PageLinks(Model.PagingInfo, xc => Url.Action("Index", new { page = xc }))
</div>
صفحه بندی اون پایین میوفته