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

CUSTOM TAG HELPER

Bu dersimizde de tag helper üzerinde çalışmaya devam edeceğiz. PageLinkHelper.cs dosyam üzerinde çalışmaya devam ediyorum.

Dersin video kısmında daha fazla detaya ulabilirsiniz.

using GursoyCNCBakim.Models;
using Microsoft.AspNetCore.Mvc;
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; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            IUrlHelper urlHelper = urlHelperFactory.GetUrlHelper(ViewContext);
            TagBuilder result = new TagBuilder("div");

            for(int i=1; i<= PageModel.TotalItems; i++)
            {
                TagBuilder tag = new TagBuilder("a");
                string url = PageModel.UrlParam.Replace(":", i.ToString());
                tag.Attributes["href"] = url;
                tag.AddCssClass(PageClass);
                tag.AddCssClass(i == PageModel.CurrentPage ? PageClassSelected : PageClassNormal);
                tag.InnerHtml.Append(i.ToString());
                result.InnerHtml.AppendHtml(tag);
            }

            output.Content.AppendHtml(result.InnerHtml);
        }
    }
}

Öncelikle bir override metot yazdım. İsmini Pocess verdim. Burada kullandığım TagHelper Context classımız bizim tag helperin çalıştırılması ile ilgili bilgiyi içerir. TagHelperOutput ise buradaki tag heleperimizin çıkışını sunar. Biz burada çıkış işlemi olarak pagination yapmak istiyoruz. Dolayısı ile TagHelperOutput kullanıyoruz IurlHelper classından nesnemi türettim bu nesne içine UrlHeplerFactory classından türettiğim nesnenin GetUrlHelper metodu ile assign işlemini yaptım. Tabi burada GetUrlHelper metodu içinde daha önceden oluşturuduğum ViewContext nesnemi kullanıyorum ki, iletişim sağlansın.

Akabinde TagBuilder ile artık sayfamızı inşa etmeye başlıyoruz. Burada div elementini kullandık. Daha sonra birden fazla sayfam olabileceği için bir for döngüsü kullanmam gerekiyordu. For döngüsü kullandım. Burada döngümün başlangıç değeri 1 çünkü 1. Sayfadan itibaren başlangıcımız olacak. Akabinde a tagi ile birlikte url oluşturma işlemleri için atama işlemlerimi yaptım. Çünkü her bir bağlantı linkimiz bir url adrese sahip olacak. İlgili css uygulama kodlarımızı da ekledim. Sayfa seçildi ise ona göre, normal durumda ise ona göre kodlarımızı da yazdım.

Sayfalama yapımızı oluşturduk, bir sonraki derste bakalım ne aşamada göreceğiz. Detay için video eğitime mutlaka göz atınız derim.

Görüşmek üzere.

Bir cevap yazın

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