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

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

Bu yazıma, Asp.NET MVC Çalışma Mekanizması – 1 ve Asp.NET MVC Çalışma Mekanizması – 2 konulu yazılarımda ki “OrnekCalisma” adındaki Asp.NET MVC projemiz üzerinden anlatıma devam edeceğim.

Bu yazımızda Controller katmanındaki HomeController.cs sınıfını açalım ve içindeki metodları inceleyelim.

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

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

Buradaki gördüğünüz Index ve About metodlarına biz ActionResult tipinden metodlar dedik.Controller katmanında bulunan herhangi bir Controller adında View katmanında da klasör bulunması gerekiyordu.O Controller sınıfı içinde ise, View katmanında kendi adında bulunan klasörün içindeki sayfaların isimlerinde ActionResult tipinden metodlar mevcuttur.HomeController sınıfınıda incelersek bu şekildedir.

Şimdi Index ve About ismindeki metodlar, metod ise, parametrede alabilirler.O halde ben About metoduna bir parametre veriyorum.

//Herhangi bir tipten parametre olabilir.Ben string tipinden tanımladım.
        public ActionResult About(string OrnekParametre)
        {
            return View();
        }

string tipinden OrnekParametre adında bir parametre tanımladık.Bu parametreye gelen değeri biz About sayfası açılınca yazdıralım.

        public ActionResult About(string OrnekParametre)
        {
            ViewData["GelenDeger"] = OrnekParametre;
            return View();
        }

Yukarıdaki gibi ViewData ile parametremizdeki değeri taşıyorum.Bu ActionResult tipindeki About metodu, çalıştığında return View(); dediğinden View katmanındaki gerekli sayfasına gidecektir.Bizde ViewData ile o sayfadan gelen veriyi tekrardan istediğimiz alana yazdırabileceğiz.

Şimdi View katmanındaki Home klasörü içindeki About.aspx sayfasına gelip, aşağıdaki gibi bir düzenleme yapalım.

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
    About Us
</asp:Content>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        About</h2>
    <p>
        Put content here.
    </p>
    <p>
        Parametreden gelen değer :
        <%:ViewData["GelenDeger"] %>
    </p>
</asp:Content>

Burada gördüğünüz gibi ViewData’da “GelenDeger” adında taşınan değeri gerekli alana yazdırıyorum.Bu şekilde projemizi çalıştırırsak eğer, aşağıda göreceğiniz gibi ViewData ile gelen değer boş gelecektir.
Bunun sebebi, string tipinden olan “OrnekParametre” adındaki parametremizin varsayılan olarak herhangi bir değer atamamış olmamızdır.Bu durumda parametremiz NULL değerde gelmektedir.

Madem varsayılan olarak değer atanmamış, o halde şimdilik biz manuel olarak değer atayalım.Adres çubuğuna gelerek aşağıdaki gibi bir yapı yazalım.
http://localhost:2697/GG/Home/About/OrnekParametreDegeri

Yukarıdaki URL yapısına bakarsak eğer, önceki yazılarımızda, şu an üzerinde çalıştığımız projenin yani “OrnekCalisma” adındaki projenin Global.asax dosyasıyla ilgili değişiklikler yapılmıştı.URL yapısına varsayılan olarak “GG” değeri verilmiş bir “Isim” değişkeni koyulmuştu.Eğer önceki yazılarımı okumadıysanız şimdi bu yazıyı buradan bırakıp önceki yazılarımı okumaya başlayın.

URL yapısının kırmızıyla renkle ve kalın bir şekilde yazılan alanına bakarsak eğer, “OrnekParametre” adındaki parametremize, “OrnekParametreDegeri” verisini taşıyan değer gönderilmiştir.

Eğer bu şekilde de sayfamızı çağırırsak gene parametremiz NULL değerde gelecektir ve gerekli alanda hiç bir değer yazmayacaktır.

Bu durumun nedeni yine Global.asax dosyasında yatmaktadır.

Şimdi Global.asax dosyasını açıp routes parametresinin MapRoute metodunu tekrardan inceleyelim.

            routes.MapRoute(
              "Default", // Route name
              "{Isim}/{controller}/{action}/{id}", // URL with parameters
              new { controller = "Home", action = "About", id = UrlParameter.Optional, Isim = "GG" } // Parameter defaults
          );

Global.asax dosyasındaki URL yapısını tekrardan incelersek eğer, en sonunda “id” adında değişken ismi mevcuttur.Peki benim HomeController.cs sınıfı altındaki ActionResult tipinden olan About metoduna verdiğim parametrenin adı nedir?”OrnekParametre”
Hee demek ki, URL yapısındaki değişken ismi ile ActionResult tipindeki About metoduma aynı isimde parametre vermeliyim.Yani buradaki “OrnekParametre” adını “id” olarak değiştirirsem hata düzelecektir.

        public ActionResult About(string id)
        {
            ViewData["GelenDeger"] = id;
            return View();
        }

Bu şekildeyken projemizi çalıştırırsak eğer, About sayfamızdaki değer alanı yine boş gelecektir.Çünkü “id” ismindeki parametremizede varsayılan bir değer vermedik.

Tekrardan üst satırlardaki gibi aynı maluel parametre değerini girersek eğer ve o şekilde sayfamızı çağırırsak ne olacak inceleyelim.
http://localhost:2697/GG/Home/About/OrnekParametreDegeri

Gördüğünüz gibi parametremize gönderilen değer bu sefer “id” ismindeki string tipinde parametre tarafından yakalandı ve ViewData ile taşınarak About sayfasında istenilen alana yazdırıldı.

Şunu kavramış olmamız lazım.Global.asax da tanımlanmış URL yapısına göre verilen değişken ismi ActionResult tipinden olan metodumuzda parametre adı olarak kullanılmak zorundadır.

Şimdide bu parametremize varsayılan değer tanımlayarak, manuel yazmadan bir değer atayalım.

            routes.MapRoute(
              "Default", // Route name
              "{Isim}/{controller}/{action}/{id}", // URL with parameters
              new { controller = "Home", action = "About", id = "Gençay Yıldız", Isim = "GG" } // Parameter defaults
          );

Gördüğünüz gibi id değişkenine “Gençay Yıldız” değer ataması yapılmıştır.Bu şekilde projeyi çalıştırırsak eğer, About sayfasında gerekli yerde “Gençay Yıldız” değerinin yazıldığını göreceğiz.

Şimdi şu hususu gelin beraber sorgulayalım.
Biz çalıştığımız projemizin her yerinde sadece Global.asax dosyasında bulunan bu URL yapısına uygun linklermi oluşturabileceğiz.Ayriyetten ActionResult tipinden olan metodlarımızın alacağı parametrelere sürekli “id” isminimi vermek zorundayız.Tabiki de hayır.

Farklı yapıda URL yapısı oluşturmak ve ActionResult metodlarında farklı parametre kullanmak için Global.asax dosyasında ki, routes parametresinin, MapRoute metodundan başka birtane daha yazmamız yeterli olacaktır.

//Bu ilk yapımızdır.
            routes.MapRoute(
              "Default", // Route name
              "{Isim}/{controller}/{action}/{id}", // URL with parameters
              new { controller = "Home", action = "About", id = "Gençay Yıldız", Isim = "GG" } // Parameter defaults
          );

//Bu ikinci yapımızdır.
            routes.MapRoute(
              "BenimYapim", // Route name
              "{controller}/{action}/{parametre1}/{parametre2}", // URL with parameters
              new { controller = "Home", action = "About", parametre1 = "Birinci Parametre Değeri", parametre2 = "İkinci Parametre Değeri" } // Parameter defaults
          );

Yukarıdaki kodları incelerseniz eğer, adı “BenimYapim” olan bir yapı oluşturduk.Bu URL yapısının şeması ise gördüğünüz gibi Controller/Action/Parametre1/Parametre2 dir.Burada dikkat etmemiz gereken husus var.controller ve action anahtar sözcükleri özel olduklarından dolayı değiştirilmemelidirler.parametre1 ismindeki değişkene varsayılan olarak “Birinci Parametre Değeri”, parametre2 ismindeki değişkene varsayılan olarak “İkinci Parametre Değeri” değerleri verilmiştir.

Şimdi ise ActionResult tipinden olan metodumuzu düzenleyelim.

        public ActionResult About(string parametre1,string parametre2)
        {
            ViewData["Parametre1"] = parametre1;
            ViewData["Parametre2"] = parametre2;
            return View();
        }

ve ardından About.aspx kodlarını düzenleyelim.

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="aboutTitle" ContentPlaceHolderID="TitleContent" runat="server">
    About Us
</asp:Content>
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        About</h2>
    <p>
        Put content here.
    </p>
    <p>
        Parametre 1 den gelen değer :
        <%:ViewData["Parametre1"] %>
    </p>
    <p>
    Parametre 2 den gelen değer :
    <%:ViewData["Parametre2"] %>
    </p>
</asp:Content>

Bu şekilde projemizi çalıştırırsak eğer, About sayfasında istenilen yerlere gerekli verilen getirildiğini göreceğiz.

Artık yazımızın sonuna gelmiş bulunmaktayız.Faydalanmanız dileğiyle.

İyi çalışmalar.

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

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