ASP.NET Core Kitap Listeleme Projesi Ders 03

Şimdi Kitap classımızı oluşuturduk, benim tüm CRUD işlemlerim bu class üzerinden gidecek yani kitap nesnesi üzerinde oluşturma, silme, update etme, listeleme işlemleri yapacağım. Şimdi solution explorer’a bi göz atalım.

Dersin video versiyonu için:

Ben projeyi oluştururken ASP.NET Core Web Application diyerek proje oluşturdum. Dolayısı ile burada bazı klasörler otomatik oluşturulmuş durumda. Bunlardan birisi de Pages klasörü. Bu klasör içinde görüleceği üzere Shared klasörü ve birkaç tane cshtml dosyalarım mevcut. Şimdi ben Pages klasörüme yeni bir klasçr ekliyorum, adını da KitapListesi verelim. Benim tüm kitaplarım burada yer alan view vasıtası ile listelensin. Şimdi bunun için KitapListesi klasörüm içine bir adet Razor Page öğesi ekliyorum. Ekleyeceğim Razor Page boş bir razor page olmalı benim işime şu anda bu yeterli çünkü. Diğerlerine gerek yok.

Açılan menüde Add Razor Page kısmında Razor Page Name alanımda isim olarak Index veriyorum.

Şimdi bu açılan menüde bir de seçenekler var. Bunları açıklayalım:

  • Generate PageModel class: Eğer burası seçili olur ise oluşturulan sayfanın page modeli classı da oluşturulmakta. Yani Index.cshtml oluşturuluyor bir de bunun code behind sayfası olan index.cshtml.cs oluşturuluyor. Biz burada bunu istiyoruz zaten, seçili bırakıyoruz.
  • Create as a partial view: Buna ilişkin örneği MiniDukkan projemizde yaptık. Bir önceki seriye göz atabilirsiniz. Partial view bir alt bölüm aslında bir web sayfacığı diyelim, herhangi bir küçük alan oluşturuyorsunuz ve bunu bir çok web sayfası içinde tekrar tekrar kullanabiliyorsunuz. Örnein hava durumu widgetleri gibi düşünün. Bir ürün detayı sunan alanlar gibi düşünün. Benim şu an bu seçeneğe ihtiyacım yok.
  • Use a layout page: Bir master page kullanıp kullanmama isteğimi soruyor, biz projemizin layoutunu kullanacağız. Dolayısı ile işaretli bırakalım.

Şimdi burada dikkat etmem gereken bir dezavantaj var. Benim KitapListesi klasörüm içinde yer alan dosyam index adında. Bir de master indexim var nerede çalıştığıma dikkat etmeliyim. Ben şu an kendi oluşturduğum KitapListesi içinde yer alan index sayfası üzerinde çalışacağım.

Kodlama İşlemim:

Bu sayfanın amacı veritabanındaki tüm kitapların listelenmesini sağlamak. Ben projeme ilişkin DbContext nesnemi startup içine eklemiştim zaten bir önceki derste. Şimdi yapmam gereken DI yani dependency injection kullanmak. Dolayısı ile öncelikle DB contextimizden bir nesne türetme ile işe başlayalım. Oluşturduğum index.cshtml dosyasının index.cshtml.cs page modeline geliyor ve kodlarımı aşağıdaki gibi yazıyorum.

namespace KitapListesiProjesi.Pages.KitapListesi
{
    public class IndexModel : PageModel
    {
        private readonly KLDbContext _db;

        public IndexModel(KLDbContext db)
        {
            _db = db;
        }

        
    }
}

Burada görüleceği üzere constructor metodumuzu oluşturdum ve DI işlemi gerçekleştirdim. Eğer DI kullanmasa idim ne yapardım. Yeni bir nesne oluşturup bununla alakalı işlemleri yapıp, sonra dispose işlemleri yapmam gerekmesi idi. Burada DI kullanımını önermekteyim.

Yine aynı index.cshtml.cs dosyama geliyor ve kodlarıma devam ediyorum:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using KitapListesiProjesi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;

namespace KitapListesiProjesi.Pages.KitapListesi
{
    public class IndexModel : PageModel
    {
        private readonly KLDbContext _db;

        public IndexModel(KLDbContext db)
        {
            _db = db;
        }

        public IEnumerable< Kitap > Kitaplar { get; set; }

        public async Task OnGet()
        {
            Kitaplar = await _db.Kitap.ToListAsync();
        }
    }
}

Yine kodlarım içinde geriye IEnumarable tipinde bir Kitap listesi dönmekteyim. Tüm bu veriler veri tabanından gelecek.

Bir de burada görüleceği üzere öncelikle vertabanından gelen kitapları göstermek için ToListAsync metodunu kullanacağım. Kitaplar dizime benim bunu atmam gerekli. Burada await keywordunu kullandım. Çünkü benim OnGet metodum bir asenkronik task tipinde bir metot olacak. Bu metotla ben veritabanında saklanan kitapların listesini alma işlemi gerçekleştiriyorum. Daha sonraki derstede bunun son kullanıcıya gösterileceği view sayfasını yapacağız. Yani bu page modelin index sayfası üzerinde çalışacağız.

Çok detaya girmek istemiyorum çünkü doğrudan ASP.NET Core konusu değil ama kısa özetlemeden de geçmek istemiyorum. Burada await ve async kullandık. Neden bunu kullandık. Benim bunu kullanma nedenim eşzamanlı olmadan birden fazla işin gerçekleştirilebilmesini sağlamak. Yni bir iş bitsin, sonra öbürü başlasın şeklinde olsun istemiyorum. Efektif bir olay değil. Bununla alakalı daha sonra net bir video çekeriz, şimdi kafalar karışmasın. Şimdi bir sonraki derstede kitapları sayfamıza çekip son halini görelim, şimdilik bu kadar.

Bir cevap yazın

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