ASP.NET Core Basit Uygulama Örneği 2.Bölüm

Form Üzerinden Veri Alma İşlemi

Yazıya başlamadan hemen önce belirteyim, arzu ederseniz bu yazıya ilişkin olarak aşağıdaki videoyu da izleyebilirsiniz.

Şu ana kadar yazdığımız kodların içinde formdaki veriler post edildiğinde sunucunun ne yapacağını belirtmedik. Bu formda verileri girildikten sonra kullanıcı Cevabı Gönder butonuna basınca tarayıcı üzerinde veriler silinecektir. Çünkü HomeController’da yer alan CevapFormu viewresult çalışacak ve ve buna bağlı View yeniden yüklenecek. Ama ben verileri almamış olacağım. Peki bu durumda ne yapmam lazım. Ben eğer bir form üzerinden veri alacak isem, HomeController içinde yeni bir action daha tanımlamam gerekli. Dolayısı ile yeni bir CevapFormu viewresult tanımlamam lazım. Peki neden?

Burada işte HTTP GET ve HTTP POST olayına geliyoruz.

HTTP GET ile biz bir formun yeniden yüklenmesini sağlayacağız. HTTP POST ile tarayıcı tarafından post isteği gönderilecek ve verilerin ASP.NET CORE sunucusuna iletilmesini sağlayacağız. Bunu yapabilmek için de action oluşturmadan önce ihtiyacımız dahilinde HTTP GET veya HTTP Post kullanmalıyız.

Şimdi HomeController üzerinde kodlarımı aşağıdaki şekilde değiştiriyorum:

Daha önce var olan CevapFormu action’uma HttpGet attribute’ü ekledim böylelikle bu metot sadece GET istekleri için kullanılsın demiş oldum. Daha sonra CevapFormu action metodumdan bir tane daha overload edilmiş olarak türettim. Burada Cevap model sınıfımdan bir nesne türettim. Bu action metoda da HttpPost attribute’ü ekledim. Böylelikle bu action metodun POST istekleri için kullanılmasını sağladım. NameSpace alanım da da ayrıca using Dugun_Davet.Models olduğuna da dikkat ediniz. Bu sayede Cevap model classıma erişebilmekteyim.

Model Binding İşlemi:

Dikkat etti iseniz CevapFormu action metodunun ilk yazımında bir View bağlama işlemi yapmıştık. Şimdi bir CevapFormu action metodundan yeni bir overload edilmiş hali ile metot oluşturduk. Birisi HttpGet diğeri HttpPost isteklerini karşılamakta. Peki ikinci overload action metot hangi view’i göstermeli? Cevap belli aslında, yine aynı viewi gösterir yani CevapFormu.cshtml’i gösterecektir. Peki bu ikisi nasıl oluyor da birbiri ile ilişkili? Bunun da cevabı Model Binding. Model Binding kullanılışlı bir ASP.NET Core özelliğidir. Model Binding, HTTP istekleriyle doğrudan ilgilenme zahmetini ortadan kaldıran güçlü ve özelleştirilebilir bir özelliktir ve tarayıcı tarafından gönderilen tek tek veri değerleriyle uğraşmak yerine C # nesneleriyle çalışmamıza olanak sağlar.

Bu basit uygulamada CevapFormu üzerinden gelen verileri bir nesne koleksiyonunda tutacağım, herhangi bir veritabanı kullanmayacağım. Tabi bu gerçek bir projede asla böyle yapılmamalıdır, çünkü ben uygulamayı kapatıp açtığımda veriler sıfırlanacaktır. Bizim amacımız burada basit bir uygulama projesi hakkında eğiitm vermek. Dolayısı ile veritabanı vs ile şu aşamada işi uzatmak istemiyorum. Temel bilgiler bilindikten sonra ilerleyen zamanlarda bu şekilde de örnekleri anlatan yazılarımız olacak inşallah. Neyse konumuza dönelim.

Models klasörü altına yeni bir class ekliyorum. Adını Repository.cs verdim. Aşağıdkai kodları yazıyorum.

Repository classı ve üyeleri static’tir. Böylelikle uygulama içinde farklı yerlerden veri almam ve verileri saklamam kolaylaşacak. ASP.NET Core; Dependency Injection olarak bilinen ortak işlevselliği tanımlamak için sofistike bir yaklaşım sunar. Dependency Injection olayına bu yazımda detaylı girmeyeceğim. Şimdilik adını bilin yeter. Bu uygulama için static bir class kullanmak en iyi yol olması sebebi ile bunu tercih ediyorum.

Gelen Cevapları Saklama

Gelen cevapları saklama işlemini yapalım. Tekrar hatırlatmakta fayda var, veritabanı kullanmayacağım için benim verilerim uygulama kapatıldığında silinecektir, yani her bir başlatmada bir önceki verilere ulaşamayacağım.

HomeController içinde yer alan CevapFormu metodumu düzenliyorum. Burada düzenlediğim CevapFormu metodum HTTP POST attribute’üne sahip olan. Kodlarım şu şekilde;

Üstteki kod bloğuna baktığımızda CevapFormu action metodumun POST sürümü çağırılmadan önce, ASP.NET Core’un model binding özelliği sayesinde HTML formu üzerinden gelen değerler KatilimciCevabi nesneme aktarılmaktadır. http üzerinden istek yapıldığında bu metoda ait sonuç argüman olarak kullanılır. HTML formu üzerinden gelen form verileri ile daha sonra Repository içinde yer alan CevapEkle metodu ile saklarım. Hatırlarsınız ki burada bir Cevap sınıfından cevaplar adında List türünde bir nesne türetmiştik.

Teşekkürler View’ini Ekleme İşlemi

CevapFormu action metoduna bağlı View üzerinde yapılan bir istek sonucunda ViewResult oluşturulmaktadır. Bu ViewResult KatilimciCevabi nesnesini kullanarak geriye bir Teşekkürler döndürmektedir. Şimdi bu view’i oluşturalım. Bunun için Views/Home klasörü altına yeni bir View ekliyor ve adını Tesekkurler.cshtml veriyorum. Aşağıdaki kodları yazıyorum:

Tesekkurler.cshtml view’i, CevapFormu action metodu üzerinden Cevap view modeline atanmış değerlere bağlıdır.  Burada kodlarda görüleceği üzere Cevap view modelinde yer alan herhangi bir property’e erişmek için @Model. İfadesi önde olacak şekilde ilgili property adını veriyoruz. Örnek olarak, @Model.Ad gibi. Artık teşekkürler sayfamızı da yaptık. Şimdi uygulamayı çalıştırıp bir örnek yapalım.

ASP.NET Core Basit Uygulama Örneği 2.Bölüm

Formumu doldurduktan sonra bilgileri giriyorum ve düğüne gitmeyi işaretliyorum, sonuç üstteki gibi. 

Cevapları Listeleme, Katılımcıları Gösterme İşlemi:

Üstte Tesekkurler.cshtml view’i sonunda bir link eklemiştim, bu linte düğüne gelecek katılımcıları listelemek için ayrı bir action kullanılarak yeni bir sayfaya yönlendirme işlemi yapacağım. Mevcut durumda henüz bir action ve view tanımlanmadığı için buradaki “buraya” linki tıklanıldığında hata ile karşılaşırız. Şimdi Home Controllera gidiyorum ve CevaplariListele adında bir action ekliyorum. Kodlarım aşağıdaki gibi:

CevaplariListele metodunu kullanarak, Repository.Cevaplar özelliği ile birlikte yeni bir View çağırıyorum. Burada View modelimde düğüne gelmeyi seçenler yani TRUE sonucunu verenler geriye dönecek. O halde Views/Home klasörü altında yeni bir View ekliyor ve adını CevaplariListele.cshtml veriyorum. Aşağıdaki gibi kodlarımı yazıyorum:

Bu arada ek bilgi vereyim, bu view’ler eklenirken Razor View olarak adlarını görmektesiniz. Razor View dosyaları .cshtml uzantısına sahiptirler. Uzantıdan anlaşılacağı üzere aslında Csharp ve html dosyalarının karışımıdır, cs ve html ismi buradan gelir. Bu dosyalarda Csharp kodu yazmak için @ sembolü kullanılır. Bunun örneğini yukarıdaki foreach döngüsünü yazmadan önce eklediğim @ işareti ile görebilirsiniz. Şimdi uygulamayı başlatıp örneğimizin sonucunu görelim.

ASP.NET Core Basit Uygulama Örneği 2.Bölüm 2

Formu doldurup katılımcı olarak geleceğimi işaretledikten sonra ilgili Cevapları yani katılımcıları listelemek için tıkladığımda sonucu görebiliyorum. HomeController içinde CevaplariListele action metodunda sadece gelek yani true olanları belirtmiştik.

Şimdilik bu kadar bu seri devam edecek ama.

Bir cevap yazın

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