ASP.NET MVC ile Sayfalama, ASP.NET’de grid bileşenlerini kullandığımızda otomatik olarak karşımıza çıkan paggination yani sayfalamanın ASP.NET MVC’de nasıl yapıldığı ile ilgili bilgiye makalenin devamında ulaşabilirsiniz.
ASP.NET MVC ile Sayfalama(Pagination) Yapımı
Öncelikle sayfalama yapabilmek için ihtiyacımız olan kütüphaneleri projemize referans olarak eklemek için visual studio menüsünde Tools > Nuget package manager > Manage NuGet Packages For Solution...
‘a tıklayın ardından arama kısmına PagedList.Mvc
yazın ve install diyerek yükleyin yada Package Manager Console
‘dan aşağıdaki kodu yazarak otomatik yüklenmesinide sağlayabilirsiniz.
1 | Install-Package PagedList.Mvc |
Sayfalama için kod tarafının ayarlanması
Sayfalamaya örnek verecek olursak aşağıdaki gibi Index metodumuzda Users
tablosundaki tüm kayıtları getirip ToPagedList()
metodu ilede sayfalamayı kod tarafında ayarlamış oluyoruz ToPagedList()
metodunun ilk parametresine gösterilecek sayfa numarasını ikinci parametresine ise sayfa başına gösterilecek kayıt sayısınısı belirtiyoruz.
HomeController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using System.Linq; using System.Web.Mvc; using MvcApplication2.Models; using PagedList; namespace MvcApplication2.Controllers { public class HomeController : Controller { DBEntities _db = new DBEntities(); public ActionResult Index(int? page) { var res = _db.Users.ToList().ToPagedList(page ?? 1, 2); return View(res); } } } |
Sayfalama için view tarafının ayarlanması
View tarafında PagedList kütüphanesinin metodlarını kullanabilmek için sayfa başına aşağıdaki tanımlamaları yapmalısınız.
1 2 | @using PagedList @using PagedList.Mvc |
Ardından sayfalama için kullanacağınız PagedListPager adlı HtmlHelper’ini aşağıdaki gibi tanımlayınız.
1 | @Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new { page })) |
Burada page ile tanımladığımız nesne sayfa numarasını taşımaktadır ve querystringde sayfa numarasını taşıyacak değerin adınıda ifade etmektedir sayfalamada oluşturulan linklere tıkladığımızda Index metoduna değer gönderilecek ve ilgili sayfaya ait kayıtlar getirilecektir.
Son olarak projemize ait örnek görüntüye gözatabilirsiniz.
PagedListPage adlı html helper’inın 3.parametresine PagedListRenderOptions sınıfı ile bazı ayarları kendimize göre özelleştirebiliyoruz şimdi bu ayarlara ilişkin tablomuza aşağıdan gözatalım.
PagedListRenderOptions Ayarları
Başlık | Açıklama |
---|---|
DisplayLinkToLastPage | Son sayfaya ait link |
DisplayLinkToFirstPage | İlk sayfaya ait link |
DisplayLinkToNextPage | Sonraki sayfaya ait link |
DisplayPageCountAndCurrentLocation | Sayfa sayısı ve şuanki sayfa |
Daha detaylı bilgiye ulaşabilmek için eklentinin GitHub sayfasını ziyaret edebilirsiniz.
PagedList GitHub Sayfası: https://github.com/troygoode/PagedList
Merhaba umarım okursunuz. Birebir kodlarınızla çok güzel işimi çözdü teşekkür ederim. Tek sorunum sorgu içinde ORDERBY değilde ORDERBYDESC kullanınca yavaş çalışması . Bunu neden yapar fikriniz var mı ?
var blogs = db.Blogs.Where(a => a.Parola == “”).OrderByDescending(b=> b.OlusturmaTarih).Select(a => new BlogModel()
{
Id = a.Id,
Baslik = a.Baslik,
Ekleyen = a.Ekleyen,
Aciklama = a.Aciklama,
Parola = a.Parola,
OlusturmaTarih = a.OlusturmaTarih,
BlgCtgLine = db.ed_blogkategoriListesi.Where(b => b.BlogId == a.Id).Select(c => new CategoriesModel()
{
Adı = c.Adı
}).ToList(),
Yorumlar = db.Yorumlar.Where(b => b.BlogId == a.Id && b.Onay == 1).ToList()
}).AsQueryable();
Hocam => nereden geliyor acaba öğrenebilir miyim
Kusura bakma > karakterini > olarak göstermiş syntax highlighter eklentisi sorun düzeldi.
Eyvallah çok makbule geçti 🙂 Teşşekür ediyorum.
Rica ederim işiniz görüldüyse ne mutlu 🙂
merhabalar, pagedlist ile ben de sayfalama yapmaya çalışıyorum fakat beceremedim yardımcı olabilir misiniz?
benim problemim şu makaleler sayfam makalehelper isminde bir model aracılığı ile listeleme yapıyor, burada pagedlistpager ile sayfalamayı yaptırmaya çalıştığım an da modeller çakışıyor ve hata alıyorum. bunu nasıl aşabilirim?
public ActionResult Makaleler(string id, int page = 1)
{
var sorgu = (from k in veritabani.Kategoris
join m in veritabani.Makales on k.KategoriID equals m.KategoriID
where k.UrlSefKatAdi == id
orderby Guid.NewGuid() descending
select new
{
m.MakaleBaslik,
m.MakaleResim,
k.KategoriAdi,
m.MakaleKisaAciklama,
m.MakaleId,
k.KategoriID,
m.MakaleTarih,
m.UrlSefMakaleAdi
}).ToList().Skip(recordsPerPage).Take(6);
List makale = new List();
foreach (var item in sorgu)
{
MakaleHepler help = new MakaleHepler();
help.KategoriAdi = item.KategoriAdi;
help.MakaleBaslik = item.MakaleBaslik;
help.MakaleResim = item.MakaleResim;
help.MakaleKisaAciklama = item.MakaleKisaAciklama;
help.MakaleId = item.MakaleId;
help.MakaleTarih = item.MakaleTarih;
help.UrlSefMakaleAdi = item.UrlSefMakaleAdi;
makale.Add(help);
ViewBag.kategoriAdi = item.KategoriAdi;
}
return View(makale);
}
Merhaba model çakışması normal çünkü geri IPagedList türünde olmayan bir liste dönderiyorsunuz yapmanız gereken .Skip(recordsPerPage).Take(6); kısmını silmek ve return View(makale) demiş olduğunuz yerde return View(makale..ToPagedList(page)) şeklinde bir düzenleme yapmalısınız bu arada sayfa başına kaç kayıt gösterileceği gibi ayarlar zaten PagedList eklentisinin özelliklerinde var gözatmanızı öneriririm eğer bulamaz iseniz bu konuda yardımcı olmaya çalışırım ama yapmanız gereken şimdilik bu.