Asp .Net Core ile Medium Tarzı Blog Sitesi Yapımı-Form Eklemek
Bu yazıda daha önce kurduğumuz veritabanına formlar yardımıyla veri girişi yapacağız başlamadan önce Views klasörü içerisine _ViewImports.cshtml isimli bir dosya ekliyor ve içine aşağıdaki kodu yazıyoruz.
@using MediumClone.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpersBu dosyada tanımladığımız yapıları tekrar tekrar tüm sayfalarda tanımlamaya gerek kalmıyor.
Tag Helpers bize formları tasarlarken yardımcı olacağı için _ViewImports.cshtml içerisinde tanımladık.
Öncelikle PostController adında bir Controller oluşturalım ve içerisine post ekleyebileceğimiz bir action yazalım. ve tabiki action için gerekli cshtml dosyasını tasarlayalım.
Bu controller üzerinde bir öncekinden tek fark [HttpPost] ifadesi, bu ifade ilgili fonksiyonun post methodu çağırıldığında çalışacağını belirtir. Fonksiyonun aldığı parametre ise yakalanan değerlerin nasıl bind edileceğini belirtiyor. Model Binding diye aranırsa bu konuda çok daha detaylı örnekler bulunabilir. Bunun dışındaki herşey ise daha önce yaptığımız işler.
HomeController içerisindeki veri ekleyen kod parçalarını artık silebilirsiniz, böylece gereksiz yere veri tabanını şişirip kafanızı karıştırmazlar.
Şimdi ise veri silmek için bir action yazalım.
Her şey bu kadar kolay tek yapmamız gereken
url/Post/RemovePost/idbağlantısını girmek. Ardından id yerine yazdığınız verinin silindiğini veritabanına bakarak görebilirsiniz.
Sırada ise veri güncelleme var, aslına bakarsanız yazının devamına geçmeden önce kendiniz bu fonksiyonu yazmaya çalışırsanız size faydalı olabilir.
Öncelikle IPostRepository sınıfına UpdatePost adında bir fonksiyon ekliyor ce PostRepository sınıfında implement ediyoruz.
PostRepository sınıfında yapılan işi anlatmaya gerek duymuyorum zaten çok açık, PostController sınıfında ise get metodunu işleyen fonksiyon tıpkı RemovePost fonksiyonu gibi iş görürken, post metodunu işleyen fonksiyon ise AddPost’un Post methoduyla çalışan kısmı gibi.
Dikkat ederseniz şuan yazdığımız fonksiyonlar hep iyi durum senaryoları için kodlanmış, örneğin kullanıcı olmayan bir veriyi silmeye çalıştığında ne olacak bilemiyoruz. Şimdi bu ve bunun gibi kötü durum senaryolarına çözüm bulmaya çalışalım.
Öncelikle get motodunu kullanan iki fonksiyonu irdeleyelim. RemovePost fonksiyonu aldığı id değerine ait bir Post girdisi bulamadığı zaman ArgumentNullException hatasını döndürüyor bu yüzden basit bir hata yakalama bloğu ile işimizi gördük.
UpdatePost fonksiyonu ise ilgili id değerine sahip post bulamayınca geriye null olarak dönüyor bu yüzden boş bir form ile bizi karşılıyordu. Basit bir if bloğu ile bu sorunuda çözdük. NotFound fonksiyonu ile ise 404 kodlu hatayı geri döndürüyoruz bunu konsol ekranına bakarak görebilirsiniz.
Post metodunu işleyen fonksiyonlarda dikkat ederseniz daha farklı bir ifade var. ModelState.IsValid ifadesi, bu ifade formun doğru bir şekilde geri dönüp dönmediğini kontrol ediyor. Örneğin mail adresi girilmesi istenen bir alana apayrı bir string girildi veya bir alanı 50 karakterle sınırlandırdınız ancak kullanıcı daha fazla karakter girdi, üyelik ekranında girilen parola sizin standartlarınıza uygun değil, bu gibi durumlarda ModelState nesnesinin IsValid değeri false olur böylece basit bir if bloğu ile kullanıcıya uyarılar gönderebilir veya herşey doğru ise işlem yapabilirsiniz. Bu işlemleri Identity(Kullanıcı Eklemek için) Modülünü ekledikten sonra anlatacağım.