ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJESİ DERS 018

Bir önceki derste kullanıcılarımızı listeleme işlemini gerçekleştirmiştik. Şimdi bu seferde diyelim ki bizim yüzlerce müşterimiz var hepsini alt alta sıralamak istemiyorum, sayfalama yapısında göstereceğim. Bu sayfalama işlemi Pagination olarak bilinir. Pagination işlemini Kullanıcılar listemiz üzerinde gerçekleştirelim. İsterseniz diğer kısımlara da uygulayabilirsiniz. Daha henüz bakım kayıtlarına vs geçmedik ama şimdiden aklınızda bulunsun. Örneğin bakım tipleri yaptığımız bölümlerden birisi. Neyse konumuza geri dönelim.

Dersi daha detaylı inceleyebilmek için dersin video eğitimine de göz atınız.

Biz pagination işlemini yapabilmek için taghelper oluşturma yöntemi ile devam edeceğiz.

Öncelikle ben her sayfada kaç kullanıcı göstereceğim, buna karar vermeliyim. Ayrıca benim kaç kullanıcım var bu da önemli bir kriter. Çünkü benim toplam kullanıcı sayıma göre bir toplam sayfa sayım hesaplanacak. Ayrıca benim her sayfada gösterdiğim kriter değerince de bulunduğum sayfa hesaplanacak. Ayrıca benim hangi sayfada olduğum bilgi URL adresimde de görüntülenecek. Mantık bu aslında. Kodları yazarken daha net anlaşılacak.

Şimdi, Models klasörüm altında yeni bir class ekliyorum ve adını da PagingInfo veriyorum. Kodlarımı yazıyorum.

Kodlar

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GursoyCNCBakim.Models
{
    public class PagingInfo
    {
        //Kullanıcılarımın toplam sayısı
        public int TotalItems { get; set; }

        //Her sayfada gösterilecek kullanıcı sayım
        public int ItemsPerPage { get; set; }

        //Güncel sayfam tutulacak
        public int CurrentPage { get; set; }

        //Toplam sayfayı gösterecek
        public int TotalPage => (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage);

        //URL Adresim için
        public string UrlParam { get; set; }
    }
}



Görüldüğü üzere az önce bahsettiğim toplam kullanıcı sayım, sayfa başı gösterilecek kullanıcı sayısı, gösterilen sayfa bilgisini tutan değişkenim, toplam sayfa bilgisini tutan dğeişkenimi tanımladım. Akabinde url adresim için string tipinde değişken oluşturdum.

Burada toplam sayfa bilgisini toplam kullanıcı / sayfa başı gösterilecek kullanıcı değişkenim ile buluyorum. Ceiling ile de çıkan ondalıklı sayı tam sayıya dönüşsün ve üste yuvarlansın istiyorum.

Bu oluşturduğum class modeli database tarafına yansıtmama gerek yok. O yüzden migration oluşturma işlemi yapmıyorum.

Şimdi gelelim özel taghelper oluşturma işlemimize. Projeme yeni bi klasör ekliyorum adını TagHelpers verdim. Benim bütün TagHelper’lerimi buraya ekleyeceğim. Bu klasör oluşturulmak zorunda değil tabi ama düzenli bir iş yapmak adına bu standarda alışmanızı tavsiye ederim. Bu klasör içine yeni bir class ekliyorum. Adını da PageLinkTagHelper verdim.

Şimdi kodlarımızı yazalım.

using GursoyCNCBakim.Models;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace GursoyCNCBakim.TagHelpers
{

    [HtmlTargetElement("div", Attributes = "page-model")]
    public class PageLinkTagHelper : TagHelper
    {
        private IUrlHelperFactory urlHelperFactory;

        public PageLinkTagHelper(IUrlHelperFactory helperFactory)
        {
            urlHelperFactory = helperFactory;
        }

        [ViewContext]
        [HtmlAttributeNotBound]
        public ViewContext ViewContext { get; set; }

        public PagingInfo pageModel { get; set; }
        public string PageAction { get; set; }
        public string PageClass { get; set; }
        public string PageClassNormal { get; set; }
        public string PageClassSelected { get; set; }
    }
}

Bir TagHelper mutlaka bir html etiketi ile ilişkilidir. Dolayısı ile bir html target elemente ihtiyacımız var. Bizim buradaki durumda kullanılacak olan hedef elementimiz “div”. Bununla ilişkili attribute ise page-model. Görüldüğü üzere, bizim oluşturduğumuz classımız da TagHelper ile extend ediliyor.

IurlHelperFactory bize asp .net core uygulamarı için url oluşturma yardımı sağlamaktadır. Dolayısı ile burada ilgili tanımlamamızı yaptık. Akabinde constructor oluşturuyor ve DI ile atama işlemimizi yapıyoruz.

Akabinde ViewContext tanımlaması yaptım. İlgili attributeleri ekledim. ViewContext nesnemiz ile http bağlama, http isteğine erişebilmemiz sağlanıyor. Bunlar ana niteliklerdi. Bizim PagingInfo sınıfımız için bir referansa ihtiyacımız olması sebebi ile PagingInfo classından pageModel adında bir property tanımladım.

Akabinde tanımlanan PageAction ise kullanıcı herhangi bir sayfaya yönlenme linkine tıkladığında ne yapılacak onun için oluşturuldu. Burada kullanıcı pagination linklerine tıkladığında amaç başka bir sayfaya yönlenmeden ilgili verilerin listelendiği bir diğer sayfaya yönlenmek.

Akabinde CSS ile ilgili olarak PageClass, PageClassNormal ve PageClassSelected propertyleri oluşturdum. PageClass temel CSS’i tutmak için, PageClassNormal seçili olmayan sayfalar için normal css, PageClassSelected ise seçili sayfa için oluşturuldu.

Şimdilik bu kadar diyelim bir sonraki derste pagination işlemine devam edelim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir