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

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

Bu yazımda veri girişli basit bir ASP.NET Core örneği nasıl gerçekleştirilir buna değinmek istiyorum. 4 temel özelliğe sahipr bir web aplikasyonu yapacağız. Tasarıma çok fazla takılmadan tabi amacımız ASP.NET Core mantığını kavramak.

Bu aplikasyonda bir arkadaşımızın düğün daveti yer alacak. Bu sayfaya girenler düğüne gelip gelmeyeceğini işaretleyecekler. Ön sayfa bir bilgi içerecek, bir form yer alacak ve bu form için validasyon kontrollerimiz olacak, bir teşekkür mesajı vereceğiz başka bir sayfa ile ve düğüne kimlerin geleceğini listeleyen bir özet sayfamız olacak.

Visual Studio’da ASP.NET Core Web Application oluşturuyorum, projemizin adını Dugun_Davet verdim. Projem bir Web Application (MVC) olacak.

Aşağıdkai şekilde bazı klasörlerin oluştuğunu görebilirsiniz. Controllers, Models, Views klasörleri MVC projesi olması sebebi ile otomatik oluşturulmuş durumda.

Burada Controllers klasörü altındaki HomeController.cs dokümanında hazır olarak bir action olduğunu göreceksiniz. Bu action Index adını taşıyor. Bir önceki yazımda belirttiğim gibi bu bir controller içinde yer alan bir action. Dolayısı ile eğer bunun bir view’i olacak ise aynı controller ismini taşıyan bir klasör adı ile birlikte aynı action adını taşıyan bir cshtml dokümanı da Views ana klasörünün altında olmalı. Bunlar zaten standart olarak oluşturulmuş durumda. Sebebi yine belirtelim MVC model yapısını seçmemiz sebebi ile.

Şimdi örnek olarak ilk aşamada bu sayfa nasıl bir sonuç veriyor görelim. Ben Views/Home/index.cshtml içeriğini aşağıdaki gibi düzenledim. Bu sayfayı çalıştırdığımızda boş bir WEB sayfasında aşağıdaki gibi bir sonuç elde ederiz.

@{
    Layout = null;
}

Merhaba

Düğün Davet Uygulaması İsmail GÜRSOY .

Veri Modeli Ekleme

Şimdi bu uygulamaya bir veri modeli ekleme işlemi yapalım. Tabi elimizden geldiğince detayları açıklayarak. Veri Modeli ASP.NET Core uygulamalarının en önemli parçalarındandır. Bazıları buna domain model adı da verir. Veri modeli, C# nesnelerini içermektedir. ASP.NET Core uygulamalarının da ana görevi aslında kullanıcı ile veri modeli arasında iletişim sağlamak ve işlemleri gerçekleştirebilmesine olanak tanımaktır.

ASP.NET Core uygulamalarında ana kural veri modeli sınıflarının bir Models klasörü altında tanımlanması gerektiğidir. Yukarıda proje oluşunca gördüğünüz Models klasörü gibi. Altında da bir adet Veri Modeli sınıfı var, ben onu kullanmayacağım tabi.

Neyse konumuza dönersek, ben bu örneğimde karışık bir modele gereksinim duymayacağım çünkü basit bir uygulama yapacağım. Benim için tek bir model sınıfı yeterli. Models klasörüne sağ tıklıyor New Item diyor ve bir Class ekliyorum. Adını Cevap.cs verdim. Models klasörümün altında artık bir Cevap.cs adında classım mevcut. Burada kodlarımı aşağıdaki şekilde yazıyorum.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace DugunDavet.Models
{
    public class Cevap
    {
        public string Ad { get; set; }
        public string Soyad { get; set; }
        public string Email { get; set; }
        public string Telefon { get; set; }
        public bool? DuguneGelecekmi { get; set; }

    }
}

Burada propertyleri tanımladım. Dikkat ederseniz DuguneGelecekmi adında bir property var bunun tipi bool, zamanı gelince sebebini açıklayacağım.

Şimdi biz uygulamamızda bir form doldurulacağını söylemiştik. Bunu ön sayfa da değil başka bir sayfada yapacağız. O yüzden projemde HomeController için de bir action tanımlamam ve buna bağlı bir view eklemem gerekli. Hadi bunu yapalım. Bir controller içinde birden fazla action bulunabilir. HomeController.cs dosyamı açıyor ve kodlarımı aşağıdaki şekilde düzenliyorum. Kodlarımı aşağıdaki şekilde düzenledim.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Dugun_Davet.Models;

namespace Dugun_Davet.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger _logger;

        public HomeController(ILogger logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            return View();
        }

        public ViewResult CevapFormu()
        {
            return View();
        }


        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

Görüleceği üzere Index ve CevapFormu actionları geriye herhangi bir argüman olmadan View döndürmekte. Ancak her biri kendine ait olan View’i döndürecektir. Dolayısı ile benim burada eğer CevapFormu metodum sonucunda yukarıdaki gibi bir View dönmesini istiyor isem buna ilişkin View’in oluşturulması gerek, aksi takdirde hata alırım.

Şimdi View ekleyelim. Views/Home klasörü üzerinde sağ tıklayıp Add seçip akabinde View diyebiliriz. Doğru yere eklediğimize emin olmalıyız Add View seçip Razor View ekliyorum. En önemli kısım isim, isim ilgili action ile aynı olacak, yani CevapFormu.cshtml olmalı.Çıkan pencerede Layout kullanma dedim.

Oluşturulan View’da kodlarımı aşağıdaki şekilde düzenliyorum.

@{
    Layout = null;
}

< !DOCTYPE html >

< html >
< head >
    
    CevapFormu
< /head >
< body >
    
Burası sayfa cevap formu için view alanı.
< /body > < /html >

Şimdi bu noktada projemi çalıştırdığımda Merhaba yazan ana sayfam görüntülenir ancak ben tarayıcıda adrese https://localhost:44324/Home/cevapformu şeklinde adres girersem yani Home controlleri altındaki cevapformu action ismini verirsem sonucum aşağıdaki gibi olur:

Yani ben cevapformu view’ını görebilmekteyim. Şu an statik bir sayfa görüyorum test amaçlı görmek için bu işlemi yaptık, bu sayfayı düzenleyeceğiz tabii ki.

Şimdi ilk açılan index sayfama bir link ekleyelim, cevap formu sayfasına bu link ile ulaşılmasını sağlayalım.

Views/Home/index.cshtml dosyasının kodları:

@{
    Layout = null;
}

Merhaba

Düğün Davet Uygulaması İsmail GÜRSOY Cevap Formu

Böylelikle iligli cevap formu sayfasına linkine gitmek için linkimi eklemiş bulunuyorum.

Burada görüleceği üzere bir asp-action attribute vasıtası ile link verme işlemini yaptık. Klasik HTML’de href’e karşılık gelmekte aslında bu. Burada ilgili View ismini vererek o viewe url yönlendirmesini yapmış oluyoruz. Tabi aslında Tag-helper kullanmak daha mantıklı ama şimdilik bu konuya değinmiyorum. Şimdi Cevap formu için ilgili viewi oluşturduk. Gelelim buradaki form yapısını oluşturmaya. Bunun için kodlarımı önce paylaşayım, sonra açıklama yapalım.

@model Dugun_Davet.Models.Cevap
@{
    Layout = null;
}

< !DOCTYPE html >

< html >
< head >
    
    CevapFormu
< /head >
< body >
    
< /body > < /html >

Kodların en başında yer alan @model ifadesi ile view model olarak Cevap classını burada kullanacağımı belirtmek için kullanılmakta. Böylelikle bu class modeli içinde yer alan propertylere erişebilmekteyim. Cevap classı içinde yer alan her bir property için bir label ve giriş öğesi tanımladım, input veya select öğeleri gibi. Yani textbox ve combobox gibi diyebilirsiniz. Burada yer alan her bir öğe asp-for kullanılarak ilgili classdaki property ile ilişkilendirilmiştir.

Label içinde kullanılan asp-for attribut’ü atama işlemi, ilişklendirme işlevi görür. Input, select gibi öğelride yer alan asp-for ise HTML kodlardaki id ve name attributeleri işlevi ile aynıdır.

Üstteki kod bloğunda dikkat edilecek bir diğer nokta form tagleri içinde yer alan asp-action attribute’üdür. Bu attribute burada bu formun hangi action ile ilişkili olduğunu göstermek için kullanılmaktadır.

Uygulamamızı çalıştırıp ansa yafadan CevapFormu sayfası linkine tıkladığımızda sonuç aşağıdaki gibi olacaktır.

Tabi tasarım kötü, tasarımla çok uğraşmayacağız ama bu kadar da kötü bırakmayacağız tabi, bayağı bir şey yapacağız. Bir sonraki yazıda devamında görüşmek üzere 😊

Bir cevap yazın

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