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

MVC’de Details Metodu

Bir önceki, MVC’de Details,Create,Edit,Delete Metodları başlıklı yazımızda listeleme(tablolama) yapılmasını görmüştük.Şimdi ise, yaptığımız bu tablodaki her bir öğrencinin detaylarına nasıl eriştiğimizi inceleyeceğiz.
Dikkat !!!
Bu yazımızı anlamanız için bir önceki yazımızı detaylı bir biçimde okumanız gerekmektedir.Yazı dizisi oluşturduğumdan dolayı, bir yazı önceki ve sonrakiyle bağlantılı şekilde örneklendirilmiştir.

Yazı dizinimize sırasıyla devam eden okuyucularım, anımsarsanız eğer bir önceki yazımızda “Ogrenci(Controller)” adında bir Controller sınıfı tanımlamıştık ve Index metodu aracılığıyla elimizle oluşturduğumuz Ogrenci tipinden nesneleri listeletmiştik.Veritabanı kullanmadığımızdan dolayı List koleksiyonu kullanarak, Session nesnesi tarafından bu koleksiyonumuzu taşıtıp gerekli örneklendirmeleri bu şekilde yapmıştık.

Bu ve bundan sonraki bütün yazılarımda da aynı mantıkta bir veri transveri kullanacağım için bu konunun kafanızı karıştırmamasına dikkat ediniz.

Şimdi asıl mevzumuza gelelim.”Ogrenci(Controller)” adındaki Controller sınıfımızı açarsak eğer, içindeki ActionResult tipinden Details adındaki metodumuz sayesinde, listelenmiş öğrencilerimizden herhangi birinin bilgisine ulaşabileceğiz.Öncelikle bu metodumuzu bir inceleyelim.

        public ActionResult Details(int id)
        {
            return View();
        }

Gördüğünüz gibi int tipinden “id” adında bir parametre almaktadır.(Bu parametre isminin id olmasının sebebinin, Global.asax dosyasından kaynaklanmasını daha önceki yazılarımda detaylı bir şekilde bahsetmiştim.)Herhangi bir öğrencinin ID değerini bu metoda göndereceğiz.Bu “id” parametreside bu değeri yakalayıp, o “ID” deki öğrenin bütün bilgilerini bizlere getirtecektir.

Öncelikle öğrencilerimizin listelenmiş şekline ve herhangi bir öğrencinin Details linkine bir göz atalım.

Yukarıdaki listemizde örnek olarak adı Gençay olan öğrencimizin Details linkine geldiğimizde, tarayıcının sol alt köşede çıkan linkinide inceleyelim.

Gördüğünüz gibi, Ogrenci adındaki Controller’ımızın içindeki Details Action’ına gidiyor ve parametre olarak 1 değerini atamaktadır.

Şimdi herhangi bir öğrencinin Details linkine tıklandığı zaman detaylarının nasıl getirileceğini inceleyelim.

        public ActionResult Details(int id)
        {
            List<Ogrenci> Ogrencilerimiz = Session["Ogrenciler"] as List<Ogrenci>;
            Ogrenci OgrenciDetay = Ogrencilerimiz.Where(o => o.ID == id).FirstOrDefault();
            return View(OgrenciDetay);
        }

Yukarıdaki kodları incelersek eğer, Session nesnemizdeki Ogrenci tipindeki List koleksiyonumuzu, Ogrencilerimiz adındaki bir koleksiyon referansına atıyoruz.Extension metod olan Where metoduyla, Ogrencilerimiz koleksiyonunda ID değeri, id değişkenine eşit olan öğrenciyi çekip, View katmanına gönderiyoruz.

Mantıksal olarak tıklanan öğrencimizin detaylarına ulaştık ve View katmanına bu detayları gönderdik.
Şimdi sıra, bu detayları göstermekte.
Details metodumuza sağ tıklayarak, Add View diyoruz.Aşağıdaki gibi ayarlamaları yapıp, Add butonuna tıklıyoruz.
Burada önemli husus, detay işlemi yaptıracağımızdan dolayı View content bölümünden “Details” seçeneği seçilmelidir.

Karşımıza gelen, Details.aspx sayfasının kaynak kodları aşağıdaki gibi olacaktır.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Calisma.Models.Ogrenci>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
	Details
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Details</h2>
    <fieldset>
        <legend>Fields</legend>
        <div class="display-label">ID</div>
        <div class="display-field"><%: Model.ID %></div>
        <div class="display-label">Adi</div>
        <div class="display-field"><%: Model.Adi %></div>
        <div class="display-label">SoyAdi</div>
        <div class="display-field"><%: Model.SoyAdi %></div>
        <div class="display-label">Yasi</div>
        <div class="display-field"><%: Model.Yasi %></div>
        <div class="display-label">Sinifi</div>
        <div class="display-field"><%: Model.Sinifi %></div>
        <div class="display-label">SinifHocasi</div>
        <div class="display-field"><%: Model.SinifHocasi %></div>
    </fieldset>
    <p>
        <%: Html.ActionLink("Edit", "Edit", new { /* id=Model.PrimaryKey */ }) %> |
        <%: Html.ActionLink("Back to List", "Index") %>
    </p>
</asp:Content>

Son olarak projemizi çalıştırıp, adres çubuğuna “http://localhost:***/Ogrenci” gibisinden link girersek eğer, “Ogrenci(Controller)” Controller’ımızdaki “Index” isimli metodumuzu çalıştıracaktır.(Varsayılan olarak Index çalıştığı için /Index yazmasakta olur.)
Gelen tablodan herhangi bir öğrencinin Details linkine tıklayalım.Karşımıza gelen ekran aşağıdaki gibi olmalıdır.

MVC’de şablon olarak bir detay(Details) işleminin nasıl yapıldığını incelemiş olduk.Umarım faydalı bilgiler sunmuşumdur sizlere.Bu yazımında sonuna gelmiş bulunmaktayız.Bir sonraki yazımda “Create” metodunu göreceğiz.
Görüşmek dileğiyle,
İyi çalışmalar.

Bunlar da hoşunuza gidebilir...

2 Cevaplar

  1. Fuat dedi ki:

    Model.ID deki model verisi nerden geliryor tanıtılmadıda son resimde kafama karıştı biraz kusura bakma yanlış soru sorduysam kardeş

    • Gençay dedi ki:

      Öncelikle bu içerikteki MVC mimarisi eski teknikle tanıtılmaktadır.Günümüzde Razor diye isimlendirilen aynı mantıkta olan ama üç aşağı beş yukarı yazım farkıda bulunan bir teknolojiyle çalışıyoruz.

      Sorunun cevabına gelirsek eğer,
      Details View’ını oluştururken “View data class” sekmesinde belirtilen Ogrenci nesnesi ilgili View’a model olarak gösteriliyor ve o View’da Inherits=”System.Web.Mvc.ViewPage” satırı sayesinde sayfada kullanılacak Model komutuna o nesne temsil ettiriliyor.

Bir yanıt yazın

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