Asp.NET MVC Çalışma Mekanizması – 2
MVC mekanizmasının kalbine giden yol Global.asax dosyasından geçer.Bunu şöyle özetleyebiliriz.Bir önceki Asp.NET MVC Çalışma Mekanizması – 1 başlıklı yazımda, üzerinde çalıştığım “OrnekCalisma” isimli projeden devam edersek eğer, projeyi F5 ile çalıştırıp, Index sayfasını ekranda görüntüleyelim.
Bu yapıdaki bir tasarımla karşımıza ekran açılacaktır.(Görüntüden alt kısmı keserek çıkardım.)
About linkine tıklayıp, sayfasının açılmasını bekledikten sonra adres çubuğunu incelersek eğer;
“http://localhost:2697/Home/About”
gibi bir adres göreceğiz.
Kırmızı renkteki kalın olarak yazılmış kısma bakarsak eğer, View katmanı altındaki “Home” klasöründeki “About.aspx” sayfası olduğunu belirtmektedir.Eğer Controller ile ilişkilendirmek gerekirse, Home(Controller) Controller içindeki, About ismindeki metodumuzdur.
Şimdi Global.asax dosyamızı inceleyelim.
public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); } }
Şimdi sistemin işleyişinden bahsedersek eğer, proje ilk çalıştığı anda Application_Start() metodu çalıştırılmaktadır.Bu metod içindeki kodlar çalıştırılmaktadır.RegisterRoutes() adındaki metodumuz yukarıdaki kodları incelersek, Global.asax dosyasında oluşturulmuş bir metoddur.İçine RouteCollection tipinden routes adında bir parametre alıyor ve bu parametrenin MapRoute() adındaki metodu sayesinde, URL Routing dediğimiz mekanizmayı gerçekleştiriyor.
MapRoute() metodunu incelersek eğer, protitipi şu şekildedir.
MapRoute(“İsim”,”Kalıp”,”Varsayılan Değerler”);
şeklinde kullanılmaktadır.
Şimdi Global.asax’ımızdaki MapRoute() metodunundaki yapıyı daha rahat incelemek için tekrardan aşağıya alalım.
routes.MapRoute( "Default", // Route adını Default olarak vermiş. "{controller}/{action}/{id}", // Adres çubuğundaki URL yapısına ne kadar çok benzediğine bakın.Zaten yukarılarda bahsettiğimiz gibi, Controller adı ve o Controller'deki ActionResult tipinden metodun ismi. new { controller = "Home", action = "Index", id = UrlParameter.Optional }//Burası ise varsayılan ayarlar mevcut.Projemiz ilk çağrıldığında açılacak olan sayfa buradan belirtiliyor.
Burada dikkat çeken bir nokta mevcut.Linkimiz /Home/About yapısındayken, Global.asax dosyamızdaki URL yapısında birde “id” isminde bir alan mevcut.Ama bizim linkimizde “About” tan sonra id yapısı yoktu.Bunun nedeni varsayılan olarak opsiyonel verilmesidir.
Eğer Global.asax dosyamızdan varsayılan olarak açılan sayfayı About sayfası olarak değiştirirsek, proje ilk açıldığı anda About dosyası açılacaktır.Asp.NET MVC Çalışma Mekanizması – 1 yazımda bahsettiğim gibi, HomeController dosyasında ilk olarak Index metodu talep ediliyordu.Bunun sebebinin Global.asax dosyasında olduğunu söylemiştim.İşte cevabı burada.Varsayılan olarak About sayfasını yaparsak, bundan sonra ilk açılışta Index isimli metodu değil, About isimli metodu çağıracaktır.
public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "About", id = UrlParameter.Optional } // Parameter defaults ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); }
Örnek olarak yukarıdaki gibi Global.asax dosyamızı değiştirirsek, ilk açılışta About sayfası açılacaktır.
Gördüğünüz gibi URL kalıplarını Global.asax dosyasından bu şekilde ayarlıyoruz.
Peki biz bu URL yapısından başka bir yapı oluşturabilir miyiz? diye sorarsanız eğer, tabikide oluşturabiliriz.
MapRoute() metodunu ben aşağıdaki gibi değiştiriyorum.
routes.MapRoute( "Default", // Route name "{Isim}/{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "About", id = UrlParameter.Optional } // Parameter defaults );
Not:”{ }”(süslü parantez) içine yazılan isimler URL Routing yapısında değişken mantığı taşımaktadır.
Eğer bu şekilde projemi çalıştırırsam ne olacak bakalım.
Görüntüde gördüğünüz gibi hata alacağız.Ben istedim ki, benim bu projemin URL yapısında isim yazdıktan sonra, Controller ve Action isimleri yazsın.Ama bu hatanın sebebi, “Isim” adında bir yapıyı yazmamızdır.Eee biz yazmadık, varsayılan olarak değeride belli değil, haliyle hata verdi program.Şimdilik biz manuel olarak elimizle yazıp deneyelim, sonrada varsayılan değerini yazıp deneyelim.
“http://localhost:2697/Gencay/Home/About”
Eğer bu şekilde tarayıcının adres çubuğuna yazar ve entera basarsak, sayfamız gelecektir.Isim değişkenine manuelde olsa bir değer yazdık.
Varsayılan olarak Isim değişkenine değer verirsek,
routes.MapRoute( "Default", // Route name "{Isim}/{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "About", id = UrlParameter.Optional, Isim = "GG" } // Parameter defaults );
Gördüğünüz gibi, Isim değişkenine varsayılan olarak “GG” değerini verdim.Projemizi başlattığımız zaman, varsayılan ekranımız sorunsuz acılmaktadır.Herhangi bir link üzerine geldiğimde, “GG” ismindeki değerimiz linkin yapısında gözükmektedir.Bunu sağlayan “Html.ActionLink” metodudur.Global.asax dosyasıyla etkileşim sonucunda bu şekilde kalıbı çıkartıyor.
Bu yazımızda Asp.NET MVC’nin Global.asax ile olan bağından bahsetmiş olduk.
Bir sonraki yazımızda görüşmek üzere..
İyi çalışmalar