MVC nedir? Temel adımlar

MVC (model-view-controller ) 1970 lerde geliştirilmiş bir design paterndir.
bir kod geliştirme yöntemidir.

"Bir view varsa onu çağıran bir action olmak zorundadır".

M - Model - Verilerin tanımlandığı kısım, veritabanı işlemleri için kullanıyoruz.
V- View Kullanıcının gördüğü kısım, .cshtml sayfalar olucak.
C- Controller - kulanıcının gönderdiği istekleri yakalayan kısım,Requestleri yakalar.Model ve view arasında köprü olur.

Visual Studio ile MVC projesi açarken

.net framework diye aratıp daha kolay ASP.NET Web Application seçeneğine ulaşabiliriz.
Boş bir proje için Empty tasarımını seçip sağ sekmeden MVC'i kontrolünü tıklayalım.
İçerisi;
Connected Service:Dışardan aldığımız bir kütüphane ya da ekstra bir servisten hizmet alıyor olsaydı bağlı servisler burda görülür.
Properties: Projemizin genel özellikleri, ismi, framework ayarları burda görülür, düzenlenir.
References: Microsoft tarafından hazır indirilen hazır kütüphaneler burda görülür.Projemizin açılması, gerekli dosyalar içerir.
Global: asax Projeyi kontrol eden sayfadır.
App_Data klasörü: Proje için kullanılan data'ları burada barındırabiliriz.(isteğe bağlı)
App_Start klasörü: Projenin başlangıcı için gereken dosyalarımız vardır.

İçerisinde RouteConfig sınıfı görüyoruz.Bu bir yönlendirme dosyasıdır.
    public static void RegisterRoutes(RouteCollection routes)
    //statik bir fonksiyon yazılmış RouteCollection diyeBir metod oluşturulmuştur.RouteCollection bir tip almış parametre olarak.
    {
       routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); //.axd adlı dosya gelirse ignore et diyor.Image türünden bir dosyadır.
       routes.MapRoute( //başlangıç sayfasındaki yönlendirmedir.
       name: "Default",
       url: "{controller}/{action}/{id}", //çalışma mantığı önce controllerın adı,sonra actionın adı,sonra da varsa parametreler
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // default olarakda Home adındaki controllere bakarım der.
    );


MVC sayfası oluşturmak için

"Bir view varsa onu çağıran bir action olmak zorundadır".
Hatırlarsak bu web projesini çalıştırmak için ;
Başlangıç olarak home adında bir Controller ve onun içerisinde Index adında action arayacağını belirtmişti.
Öyleyse ilk önce Home adında controller'ı oluşturalım. Kendisi otomatik Index adında bir actıion oluşturacak. Bizde bu metod içerisinde sağ tıklayıp Add View page yapabileceğiz.

ActionResult Nedir

MVC teknolojisini kullanırken, belirli bir sayfayı gösterebilmek için hep Veri Tipine ihtiyaç duyacağız.
Object bir veri tipidir.Birçok veritipini içerisinde barındırabilir.
string,int,bool,.. gibi. (Bunlar objectin sınırlandırılmış halidir)
Action Result da bir veri tipidiir. Birçok veritipini içinde barındırır.
ViewResult,JsonResult, PartialViewResult,... gibi


  public ActionResult Index()   //ActionResult VeriTipi , Index adlı Action çalıştırıyoruz. 
  {
     return View();          //Bize View() helper metodunu getir. View() Sayfadır.Adına Index verdik.
  }

    public ViewResult Index()     //ViewResul VeriTipi (actionResult tipidir zaten) Index adında Sayfa
    {
        return View();
    }

 

imlecin içerisine girip ctrl+shift+space tıklayarak bize hangi veritiplerini döndüreceğini gösterir.F12 detay gösterir.
Action'ın içerisin'e sağ tıklayalım ve -AddView diyelim. Karşımıza gelen sekmede;
Template = şablon seçimidir.
Creare as a partial view = Sayfa parçacıklarıdır
Layout = şablon demektir. Aspx deki MasterPagedır. Kullanırken Viewstart dosyası oluşturur.
Layout sekmesini tıkladığımızda Shared klasörünü oluşturduğunu görürüz.

@{
Layout = null;
}
Burdaki süslü parantez ve et işareti Razer View Engine 'dan gelir.
Ön yüz geliştirdiğimiz sayfada (back-end tarafta) server-side kod yapabildiğimiz bir blokdur.

URL

Url de herzaman ilk controller ismi sonra Action ismi gelir. (view bekleyemezsiniz)

Asp.Net Web Form ve Asp.Net MVC Karşılaştırması

aspx formlarında kontroller'e, IDler üzerinden erişilirdi
MVC de ise kontroller'e, name ler üzerinden erişiriz.

aspx formlarında Eventler oluştururduk.
MVC de actionlar (aslında metodlar) vardır.

Aspx formlarda, ViewState yapısıyla web formda kullandığımız kotrollerin bilgisini, olayları taşır ve Hidden Inputlar içerisinde saklar.
MVC'de ta bu tür bilgiler tutulmaz, kaynak sayfamız temizdir, seo dostudur.

MVC mimari katman da asp, Php, asp.net teknolojilerinde kullandığımız querystring yapısı yok. Seo dostu anlaşılailir linkler var. Asp.Net te genelde kullandığımız IsPostback yapısı hakimdi. Sayfa yeni mi açıldı yoksa iki kere tekrarlandı mı diye kodu yazarız MVC de Postback ve ViewState yoktur.

Asp.Net web formlarında, front sayfalarda sunucu kodu çalıştırabileceğimiz, inline kod bloglarımız vardı. < % ile başlardı ve her kod satırı için girmek durumundaydık.
MVC de razor engine yapısı var. 1 tane @ işareti girip geri kalanları daha kolay bir yapıda yazabiliriz.

KISA BİLGİLER
@RenderBody() = ContentPlaceHolder ile aynıdır.
System.Web.Razor Referans eklenmişti Bu sayede gelmiştir.
MasterPage kullanmak istersek Views-Shared klasörü açıp interface _Layout.cshtml dosyası eklemek.
istediğimizi ekler , contentplace için etRenderBody() metodunu kullanırız
etRenderBody() birkez kullanılır. Ama RenderSection() metodunu istediğimiz kadar kullanailiriz.
_Layout sayfamızda etRenderSection("ilavepanel", required: false) deriz
İstediğimiz sayfaya gider etsection ilavepanel { dersiniz }

SORULAR
ViewStart dosyasında razer oluup Shared klasörünün yolu görünüyor. Bu dosya gereksiz oluşmuyor mu? Bunu contrellarda yada mevcut bir dosyada gösteremez miyiz?


Home Controller Kısa İnceleme

HomeController sınıfımızı incelersek. HomeController: Controller yani he bir sınıf Controller sınıfından miras aldığını görürüz.
Geriye ActionResult veritipi dönderen Bir index metodumuz var.
Eğer içerisinde bir değer göndereceksek bu, elbet ActionResult tipli olacakdır.
HomeController classımızdaki Index Metonduda gördüğümüz gibi Return View(); metodu olmuştur.