Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET MVC Çalışma Mekanizması – 1

Artık Asp.NET MVC çalışma mekanizmasını inceleme vakti geldi.Bir önceki yazımızda oluşturduğumuz “OrnekCalisma” adındaki proje üzerinden devam edeceğiz.

Hatırlarsanız eğer, View ile Controller arasında bir bağ olduğundan bahsetmiştik.
Konuya girmeden önce aşağıdaki görüntüyü incelemenizi tavsiye ediyorum.

Yukarıdaki görüntüyü incelerseniz eğer, View ile Conroller arasındaki bağı az çok görmüş olacaksınız.Dikkat ederseniz Controller katmanında “AcconuntController.cs” ve “HomeController.cs” adında iki dosya mevcut.View katmanına bakarsanız eğer, “Account” ve “Home” adında iki klasör mevcuttur.
Buradaki mantık şudur.Controller katmanında herhangi bir isimde Controller’ım olabilir.MVC mantığına göre o isimde View katmanında da klasör bulunmalıdır.

Şimdi burada dikatimizi çeken bir nokta var.Controller kısmındaki dosya adında, View kısmında klasör bulunmalı diyoruz ama görüntüdeki dosya isimleri farklı gibi gözüküyor.Biri “AccountController” ken, diğeri “Account”.Evet bende sormuştum, bu şarta göre View katmanındaki klasörün adıda “AccountController” olması gerekmiyor mu? diye.Aslında Controller katmanındaki dosyaların gerçek adı, adlarındaki “Controller” ifadesi çıkarılarak söylenir.Yukarıdaki görüntüde “AccountController.cs” Controllerinin adı, “Account” Controlleridır.

Zaten Controller oluştururken verdiğimiz ismin sonuna “Controller” ifadesini eklemek zorundayız.Örnek olarak, Controller katmanına sağ tıklayıp Add diyerek bir Controller eklersek projemize Visual Studio’nun Controller isminin yanına “Controller” ifadesini eklediğini göreceğiz.

Yukarıdaki görüntüde de gördüğünüz gibi, Visual Studio Controller eklerken bile verilecek ismin alanını seçerek, yanına Controller ifadesini eklemiştir.

Şimdi HomeController.cs dosyamızı açarsak eğer, göreceğimiz kodlar aşağıdaki gibi olacaktır.

    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";

            return View();
        }
        public ActionResult About()
        {
            return View();
        }
    }

View katmanındaki Home ismindeki klasörün içine göz atalım.


View katmanı ile Controller katmanı arasındaki bağın gerekçelerinden biri, Controller’daki bulunan dosyanın aynı isminde View katmanında klasörü bulunması gerektiğini söylemiştik.

HomeController.cs ismindeki Controller’ı açtığımız zaman içindeki kodları yukarıda gördük.Dikkat ederseniz,Controller sınıfından kalıtım almış, HomeController adındaki bir sınıf görüyoruz.Bu sınıfın içinde iki tane ActionResult tipinden metod mevcut.Birinin adı “Index” diğeri ise “About”.View katmanı içinde bulunan Home klasörünü incelersek eğer, içinde About.aspx ve Index.aspx dosyalarının mevcut olduğunu göreceğiz.İşte MVC de Controller ve View arasındaki ilişki bu şekilde kurulmaktadır.

View katmanı içinde Controller katmanındaki aynı dosya ismine sahip klasörler yapılandırıyoruz.Bu Controller dosyasının içindeki ActionResult tipinden olan metodların isimleride, View katmanındaki klasörünün içinde bulunan sayfa isimleri olmak zorundadır.

Şimdi Index ve About metumuzun başına birer Break Point koyuyorum ve programımızı çalıştırıyorum.Eğer aynı şekilde sizlerde Break Point yaptıysanız, göreceksiniz ki, Index metodunda Break Point takılacaktır.

Neden About metodumuzda değilde, Index metodumuzda Break Point takıldı?Kod sayfasında About metodumuzdan üst sırada olmasından dolayı olabilir mi?

Tabikide hayır.Bu sorunun cevabı Global.asax dosyasında saklıdır.Bu yazımızın ilerisinde bu konuya tekrardan değineceğiz.

Biz F11’e basarak Break Point’i devam ettirelim.Tabi devam ederken Index metodu içinde aşağıdaki kod bloğunuda okuyacağız.

ViewData["Message"] = "Welcome to ASP.NET MVC!";

ViewData[“DeğişkenIsmi”] Nedir?
View katmanı ile Controller katmanı arasında bir bağ olduğundan dolayı, kullanıcı tarafından bir istek yapıldığı zaman, ilk başta Controller katmanı çalışıyor daha sonra View katmanında o Controller’a bağlı olan sayfa çalışıyor.Eğer ben Controller’dan View katmanına bir bilgi aktarmak istiyorsam, bu işlemi ViewData[“DeğişkenIsmi”] elemanıyla yapabiliyorum.

Break Point’e kaldığımız yerden devam edersek eğer, “return View();” kodlarını işleteceğiz.Bu kodu irdelersek eğer, View sayfama geri dönüş yapması gerektiğini söylüyor.

Eğer Break Point’le devam edersek, Index.aspx sayfası açılana kadar F11’e basalım.

Neden Index.aspx sayfası açılıyorda, About.aspx sayfası açılmıyor.Bunun nedenini buraya kadar okuduysak artık biliyoruz.Controller’ımız View’da ilişkili olduğu klasöre gidiyor.ActionResult tipindeki Index isimli metodu çalıştırdığımız için, Index adındaki dosyayı, o klasörde arıyor ve getiriyor.

Eğer, View katmanı içinde Home klasörü altında Index.aspx dosyası mevcut olmasın, sistem bulamadım diye hata verecektir.

En sonunda Break Point’e devam edersek Index.aspx sayfası açılacaktır.

Yukarıda gördüğünüz gibi açılan sayfanın sağ üst köşesinde Home ve About linkleri mevcuttur.
Eğer bu linklerin üzerine gelirsem, tarayıcının sol alt köşesinde çıkan linklere dikkat edelim.

Home linki üzerinde
About linki üzerinde
Burada dikkat etmenizi istediğim iki husus var.About linkine bakarsak eğer, ../Home/About/ yapısındadır.Bunu nasıl bir benzeşim yapabiliriz.Controller dosyası Home(Controller) olan, HomeController içindeki ActionResult tipindeki metodunun adıda About olan diyebiliriz.Ya da View katmanındaki klasörü Home olan, Home klasörü içindeki About.aspx dosyası diyebiliriz.Diğer bir husus ise, Home linkini gözlemlersek, About linkindeki gibi bir yapı bulunmamaktadır.Yani burada Home linkini varsayılan bir link gördüğünden dolayı bu şekilde bir link yapısına sahiptir.Bu yapının sırrıda Global.asax dosyasındadır.İleride bunada değineceğim.

Eğer açılan pencerede About linkine tıklarsak, Index sayfasındaki mantık gibi sistem ileyecektir.Yani Controller katmanıyla iletişim kurulacak.HomeController dosyasının içindeki About metodunu çalıştıracak ve View katmanı içindeki, Controller ile aynı isimde olan Home klasöründeki About.aspx sayfasını çağıracaktır.

Bu yazımızda MVC’de View ve Controller katmanları arasındaki mantığı anlatmaya çalıştım.Bir sonraki yazımda MVC’de Global.asax dosyasının önemi, kullanımı ve bu sayfadaki bazı Global.asax dosyasıyla alakalı meçhul bilgileri anlatan içerikte olacaktır.

Bir sonraki yazımda görüşmek üzere.

İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Karamsal dedi ki:

    Güzel Çalışma Emeğinize Sağlık.

  2. Ebru dedi ki:

    Emeğinize sağlık 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir