ASP. NET Core Kitap Listeleme Projesi Ders 14

Projemizin son aşamasına geldik artık. Bu dersten daha sonra bir ders ile projeyi bitireceğim. Daha sonra yeni bir peojeye başlayacağız. Projemde yeni bir kitap ekleme ile bir kitabı düzenleme aslında aynı form sayfasına gidiyor. Biz bu iki işlemi tek bir sayfa üzerinde de yapabiliriz, bu dersimizde bunu combine etme işlemi ile devam edelim. Bunun için Pages/KitapListesi klasörüm altına yeni bir razor page ekliyorum. Adını da GuncelleEkle.cshtml verdim.

Detayı bilgi için video eğitimi izlemenizi tavsiye etmekteyim.

Benim bu sayfam daha önce oluşturduğum Duzenle.cshtml sayfama çok benzeyecek. Dolayısı ile Duzenle.cshtml sayfama geliyorum ve burada üst kısımdaki model tanımlamalarım hariç kodları kopyalıyor ve GuncelleEkle.cshtml içine model tanımlamalarının hemen altına yapıştırıyorum.

Kodlarımız:

@page
@model KitapListesiProjesi.Pages.KitapListesi.GuncelleEkleModel



Kitap Bilgileri Düzenle


@section Scripts { < partial name="_ValidationScriptsPartial" /> }

Bununla birlikte Duzenle.cshtml.cs sayfamın içinde yer alan kodlarımı da PageModel’den sonraki kısmı alıyor kopyalıyor ve GuncelleEkle.cshtml.cs içine yapıştırıyorum. Burada kodlarımı düzenliyorum:

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 GuncelleEkleModel : PageModel
    {
        private KLDbContext _db;

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

        [BindProperty]
        public Kitap Kitap { get; set; }

        public async Task< IActionResult > OnGet(int? id)
        {
            Kitap = new Kitap();

            //Yeni kitap ekleme
            'if'( id == null)
            {
                return Page();
            }


            //Kitap güncelleme
            Kitap = await _db.Kitap.FirstOrDefaultAsync(x => x.Id == id);
            'if' (Kitap == null)
            {
                return NotFound();
            }
            return Page();
                
        }

        public async Task< IActionResult > OnPost()
        {
            'if' (ModelState.IsValid)
            {
                'if' (Kitap.Id == 0)
                {
                    _db.Kitap.Add(Kitap);
                }

                else
                {
                    _db.Kitap.Update(Kitap);
                }
               

                await _db.SaveChangesAsync();

                return RedirectToPage("Index");
            }

            return RedirectToPage();
        }
    }
}

Burada kod düzenleme işlemimi gerçekleştirdim. Dikkat edilecek en büyük değişiklik OnGet metodu içinde parametre olarak tanımladığım int id için int? İd şeklinde belirttim. Çünkü ilk kitap oluşturma da bu id değeri otomatik gelecek, yani id değeri olabilir de, olmayabilirde. Güncelleme de id değeri gelecek sonuçta. Dolayısı ile ? kullanıyoruz. Daha sonra bu OnGet metodu içinde Kitap classımdan yeni bir instance alıp, id değerinin gelip gelmediğini kontrol ettim. Eğer id değeri boş geliyor ise demek ki yeni bir kitap oluşturma işlemi yapılacak. Eğer id değeri dolu gelirse update işlemi yapılacak demek o halde veritabanından gelen değerleri okuyorum ve sayfama yükleme işlemi yapıyorum.

Daha sonra buna benzer şekilde OnPost metodu içinde kodlarımı yazdım. Öncelikle ModelState kontrolü yaptım eğer Model state kontrolüm sonucu true gelir ise kitap güncelleme veya oluşturma için işlem adımlarım yapılacak. Burada kitap ekleme için doğrudan Add metodu kullandım, güncelleme işlemi için ise doğrudan Update kullandım.

Burada yer alan Update metodu ile benim kitap classımda yer alan tüm propertylerler güncellenir. Ama ben eğer kitap içinde diyelim ki sadece iki property düzenlemek istiyor isem bu sefer Duzenle sayfamda yazdığım gibi güncelleme kodlarımı yazmam gerekir, burası önemli.

Bir sonraki videoda da bu kısmın kullanıcıya yansıttığımız razor page kısmına ilişkin düzenlemelerimizi yapalım, görüşmek üzere arkadaşlar.

Bir cevap yazın

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