Maddeleri Onay Kutusu ile Tamamlama
Yapılacaklar listesine ekleme işini yaptınız çokta güzel oldu. Fakat bir de bu işin tamamlanması var. Views/Todo/Index.cshtml
sayfasına göre her yapılacak için onay kutusunu da gösterilecek.
Her maddenin bir benzersiz ID( guid )'si olduğundan bunu bullanabiliriz. Bunu name alanında belirterek kontrolöre bunu paslayarak bu maddeyi güncelleyebiliriz.
Akışın tamamı aşağıdaki gibi olacak
Kullanıcı onay kutusunu işaretler ve Javascript fonksiyonu tetiklenir.
Javascript kontrolöre talep gönderir.
Kontrolörde bulunan aksiyon servis katmanına çağrıda bulunarak bu maddenin güncellenmesini sağlar.
Güncelleme sonunda cevap Javascript fonksiyonuna geri gönderilir.
HTML kodu güncellenir.
Javascript Kodu Ekleme
Önce site.js
'yi açık ve $(document).ready
bloğunun içerisini aşağıdaki gibi düzenleyin.
wwwroot/js/site.js
Sonrasında sayfanın sonuna aşağıdaki kodu ekleyin:
Bu kod daha önceki yapılacak oluşturma fonksiyonu ile aynı yapıya sahip. Fakat bu defa HTTP POST ile http://localhost:5000/Todo/MarkDone
adresine talep gönderip bunun içerisinde id olarak veri tabanından gelen ve onay kutusunun name kısmında belirttiğimiz id
yi paslıyoruz.
Herhangi bir onay kutusunu işaretleyip tarayıcınızın Network Araçlarına bakacak olursanız talebi aşağıdaki gibi görebilirsiniz.
$.post
başarılı bir şekilde döndüğünde onay kutusunun bulunduğu satır'a done
sınıfı eklenir. Bu sınıfa has stil değişikliği uygulanmış olur.
Kontrolöre aksiyon ekleme
Sizin de tahmin edeceğiniz gibi, TodoController
içerisine MarkDone
aksiyonunu eklemeliyiz.
Şimdi bu adımların üzerinden geçelim. Öncelikle id
isminde bir Guid
argümanı ekledik. Yani bu metodun Guid beklediğini bildirdik. Daha önce yazdığımız AddItem
aksiyonunda NewTodoItem
modeli kullanmıştık. Fakat bu defa beklentimiz sadece id
olduğundan böyle bir sınıf yapmaya gerek yok. ASP.NET Core gelen değeri guid olarak ayrıştırmaya çalışacak.
Herhangi bir model oluşturmadığımızdan ve doğruluk tanımını [Required]
yapmadığımızdan dolayı metodumuz içerisinde ModelState
kelimesini kullanamıyoruz. Fakat bunun yerine Guid.Empty
gibi bir kontrol ile boş olup olmadığını kontrol edebiliriz. Eğer boş ise BadRequest yani 400 Bad Request
dönderebiliriz.
Sırada kontrolörün servisi veri tabanı güncellemesi için çağırması kaldı. Bu yeni bir metod olan MarkDoneAsync
ile ITodoItemService
üzerinde yapılmakta. Sonuç olarak eğer veri tabanı güncellemesi başarılı olursa true aksi halde false değeri döndürecek.
Sonuç olarak herşey düzgün bir şekilde çalıştıysa javascript'e Ok()
yani 200 OK
değerini döndüreceğiz. Daha kompleks bir yapı ile JSON yapısında farklı veriler göndermekte mümkün fakat şimdilik buna ihtiyacımız yok.
Servis Metodu Ekleme
İlk olarak MarkDoneAsync
'i arayüze ekleyin:
Services/ITodoItemService.cs
Sonra bunun uygulamasını TodoItemService
üzerinde şu şekilde tamamlayın:
Services/TodoItemService.cs
Bu metod Entity Framework Core'un Where
komutunu kullanarak ID kolonuna göre arama yapmaktadır. SingleOrDefaultAsync
metodu bulduğu satırı item'a atar eğer bulamaz ise bu durumda item null
olur. Bunun kontrolünü yaptıktan sonra doğrudan false dönebiliriz. Eğer item
boş değilse bunun sadece IsDone
özelliğini ayarlayarak güncelleyebiliriz.
SaveChangesAsync
metodu uygulanana kadar yaptığımız değişiklikler sadece yerelde değişti.SaveChangesAsync
çalıştıktan sonra kaç satırı güncellediyse onu dönderir. Bu durumda ya 1 tane gönderecek veya 0, ama 0 olursa bir yanlışlık olduğunu söyleyebileceğiz. Eğer 1 ise true
aksi halde false
döndereceğiz.
Test
Uygulamayı çalıştırıp bazı onay kutularını işaretleyin. Sayfayı yenilediğinizde bu maddelerin yapılacaklar listesinden silindiğini göreceksiniz. Bunun nedeni GetIncompleteItemsAsync
te bulunan Where
filtresidir.
Şu anda, uygulama herkesçe görülebilen yapılacaklar listesi durumundadır. Eğer kişiye özel bir liste olsa daha kullanışlı olabilir. Bir sonraki bölümde, ASP.NET Core Identity kullanarak güvenlik ve kimlik denetleme özelliklerini entegre edeceğiz.
Last updated