yandex

Ulvi Sözlük

ulvi-sozluk-logo
 
 

MVC Model tanımı ve örnekler

 

MVC - MODEL
Elimdeki verileri View'a taşıyabilmek için kullanılan yapıya Modeller denilir.

Örneğin ViewSayfamızda biz zaman veri türünü taşımak istersek,
Controller'da değişkeni oluşturup Return View() - parantez içinde değişkenin adını yazıp taşıyabiliriz.

Controller da değişken oluşturuğ bir bilgi gönderdik. Fakat View'ın bundan haberi yok. Haberdar etmek için ifade eklememiz gerekir.
Razer'ın oluştrduğu view engine yapısıyla artık backend tarafındaki komutları önyüzde de kullanabileceğiz.
Razer derki, önyüze bir veritipi gönderdiysen bana, özel bir komut olarak ifade et.
O komutumuzun adı da Model.
@model özel bir tanımlamadır.Bunu yazdığımızda biz önyüze deriz ki backend tarafından gönderilen bir veritipi var.
@model ile veri tipinin geleceğini söyledik. Peki ya Bilgi aktarımı?
@Model ise bize propertisini sağlar.Bilgi akışı sağlanır.
Değişle ya da bilgi ne olursa olsun, teknoloji bize, veritürünü @model ifade olarak göster ve @Model adında property ile sağla der.
backend'e değişken olarak ne verirsek verelim, önyüzde @Model biçmiyle erişiriz.(üzerine geldiğimiz de veritipini görebiliriz)
Contrellar'a gelip bir değişken tanımlayalım;



      public ActionResult Form1_2()
        {
            DateTime suan = DateTime.Now;
            return View(suan);
        }

      View sayfamızda;
        @model DateTime
        @Model






Controller da string değişkenini gönderirsek View bunu ViewName olarak algılar.
Projeyi çalıştırdığımızda, Sayfa adı gibi arattırır ve Hata alırız.
Önlemek için object türü string olduğunu belirtiriz.

.

        public ActionResult Form1_3()
        {
            string isim = "Molly";
            return View((object)isim);
        }


        @model string
        @Model;






Bu örnekte veri türümüz bir sınıf olsun. Model klasöründe oluşturalım;


.
        Model klasörü
        public class E_Kisi
        {
          public string AdSoyad { get; set; }
           public DateTime DogumTarihi { get; set; }
        }
        Controller klasörümüzde  kisi klassımızdan instance alalım
        public ActionResult Form1_4()
        {
           E_Kisi iekle = new E_Kisi(); //kişi sınıfımdan instance alırım
           iekle.AdSoyad = "Molly B";
           DateTime trh = new DateTime(1990, 01, 02);
           iekle.DogumTarihi = trh;
           return View(iekle);
        }
            @model _3_MVC.Models.E_Kisi (ctrl+noktaya basarız)(sınıfın içindeki yolu copy/paste ile de olur)
            @Model.AdSoyad
            @Model.DogumTarihi
            ya da
            @using _3_MVC.Models @model E_Kisi
 





Birden çok verimizi Generic Liste'ye alıp bilgi akışını gönderelim.


.
        Model klasörü
        public class E_Kisi
        {
          public string AdSoyad { get; set; }
           public DateTime DogumTarihi { get; set; }
        }
        public ActionResult Form1_5()
        {
        List<E_Kisi> listem = new List<E_Kisi>();
        listem.Add(new E_Kisi { AdSoyad = "Büşra Zurnacı", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Petek Okumuşoğlu", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Yavuz Selim Çınar", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Mehmet Turgut", DogumTarihi = new DateTime(1990, 12, 12) });
        return View(listem);
        }
        @model List<_3_MVC.Models.E_Kisi>
        @foreach (var item in @Model)
        {
        @(Model.IndexOf(item) + 1)
        @item.AdSoyad
        @item.DogumTarihi.ToShortDateString()
        }
        ya da using kullanırız temiz görünür
        @using _3_MVC.Models
        @model List<E_Kisi>
 





İki sınıfımızı da aynı anda view sayfamızda göstermek istersek; (ilk yöntem)
O zaman da bir sınıf daha oluşturur iki classımız olduğunu belirtiriz.
İlk yöntem Models klasörde ViewModels klasör oluşturup yazarsak daha estetik durur.



.
       Model Sayfamız
        public class E_Book
        {
           public int No { get; set; }
           public string Baslik { get; set; }
        }
        public class E_Kisi
        {
           public string AdSoyad { get; set; }
           public DateTime DogumTarihi { get; set; }
        }
       Bir klasör oluşturalım Modelsin altında ViewModels adında. (isteğe bağlı bir isim)
       Burda BusinessLogic türü bir metodumuz olucak
    
        public class BL_KitapKisi
        {
            public E_Book BL_Book { get; set; }
             public List<E_Kisi> BL_Kisi { get; set; }
        }



        public ActionResult Form1_6()
        {
        E_Book ibookekle = new E_Book { Baslik = "Doğunun Limanları",No = 183};
        List<E_Kisi> listem = new List<E_Kisi> ();
        listem.Add(new E_Kisi { AdSoyad = "Büşra Zurnacı", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Petek Okumuşoğlu", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Yavuz Selim Çınar", DogumTarihi = new DateTime(1990, 12, 12) });
        listem.Add(new E_Kisi { AdSoyad = "Mehmet Turgut", DogumTarihi = new DateTime(1990, 12, 12) });
        return View(new BL_KitapKisi { BL_Book = ibookekle, BL_Kisi = listem });
        }



        @model _3_MVC.Models.ViewModels.BL_KitapKisi
        @Model.BL_Book.Baslik;
        
        @foreach (var item in Model.BL_Kisi)
        {
        @(Model.BL_Kisi.IndexOf(item) + 1)
        @item.AdSoyad
        }
        ya da using kullanırsak
        @using _3_MVC.Models.ViewModels
        @model BL_KitapKisi








İki sınıfımızı da aynı anda view sayfamızda göstermek istersek; (ikinci yöntem)
Tuple<> yöntemi



.


    public class E_Kisi
    { 
        public string AdSoyad { get; set; }
        public DateTime DogumTarihi { get; set; }    
        public int Boy { get; set; } 
        public int SinifID { get; set; }
        public E_Kisi()
        {
        }
    }


    
    public class E_Sinif
    {
        public int SinifID { get; set; }
        public string Ad { get; set; }
    }




     public ActionResult Form1_8()
        {
            List<E_Sinif> SinifListem = new List<E_Sinif>();
            SinifListem.Add(new E_Sinif { SinifID = 1, Ad = "Asp.Net 2" });
            SinifListem.Add(new E_Sinif { SinifID = 2, Ad = "Asp.Net 3" });
            SinifListem.Add(new E_Sinif { SinifID = 3, Ad = "Javascript" });
            List<E_Kisi> Kisilistem = new List<E_Kisi>();
            Kisilistem.Add(new E_Kisi { AdSoyad = "Büşra Zurnacı", DogumTarihi = new DateTime(1990, 12, 12), Boy = 170, SinifID = 1 });
            Kisilistem.Add(new E_Kisi { AdSoyad = "Petek Okumuşoğlu", DogumTarihi = new DateTime(1990, 12, 12), Boy = 190, SinifID = 2 });
            Kisilistem.Add(new E_Kisi { AdSoyad = "Yavuz Selim Çınar", DogumTarihi = new DateTime(1990, 12, 12), Boy = 180, SinifID = 3 });
            return View(new Tuple<List<E_Sinif>, List<E_Kisi>, string>(SinifListem, Kisilistem, "Datalar"));
        }




    @using _3_MVC.Models.Entity
    @model Tuple<List<E_Sinif>, List<E_Kisi>, string>
 
 
    <ul>
        @foreach (var item in Model.Item1)
        {
            <li><a href="/_1Home/Form1_8A/@item.SinifID"> @item.Ad  </a> </li><br />
        }
    </ul>
  
    <table>
        <tr>
            
            <th>Ad</th>
            <th>Dogumu</th>
            <th>Boyu</th>
            <th>Sınıf</th>
        </tr>
        @foreach (var item in Model.Item2)
        {
            <tr>
                <td>@item.AdSoyad |</td>
                <td>@item.DogumTarihi |</td>
                <td>@item.Boy |</td> 
                <td>@Model.Item1.Find(x => x.SinifID == item.SinifID).Ad</td>
            </tr>
        }
    </table>
Eğer Öğrenci Listesini Shared klasöründe bir partial view olarak görmek istersek. Adını ve Türünü şu şekilde yazarız
@Html.Partial("SinifListesiPartial", Model.Item2)








    
        Detay için
        public ActionResult Form1_8A(int id)
        {
            List<E_Sinif> SinifListem = new List<E_Sinif>();
            SinifListem.Add(new E_Sinif { SinifID = 1, Ad = "Asp.Net 2" });
            SinifListem.Add(new E_Sinif { SinifID = 2, Ad = "Asp.Net 3" });
            SinifListem.Add(new E_Sinif { SinifID = 3, Ad = "Javascript" });
            ViewBag.Siniflar = SinifListem;
            List<E_Kisi> Kisilistem = new List<E_Kisi>();
            Kisilistem.Add(new E_Kisi { AdSoyad = "Büşra Zurnacı", DogumTarihi = new DateTime(1990, 12, 12), Boy = 170, SinifID = 1 });
            Kisilistem.Add(new E_Kisi { AdSoyad = "Omachinai Koi", DogumTarihi = new DateTime(1990, 12, 12), Boy = 190, SinifID = 1 });
            Kisilistem.Add(new E_Kisi { AdSoyad = "Petek Okumuşoğlu", DogumTarihi = new DateTime(1990, 12, 12), Boy = 190, SinifID = 2 });
            Kisilistem.Add(new E_Kisi { AdSoyad = "Yavuz Selim Çınar", DogumTarihi = new DateTime(1990, 12, 12), Boy = 180, SinifID = 3 });
            List<E_Kisi> sinifinOgrencileri = Kisilistem.Where(x => x.SinifID == id).ToList();
          
            return View(sinifinOgrencileri);
        }



    Detay Sayfamız Form1_8A olsun
    @using _3_MVC.Models.Entity
    @model List<E_Kisi>
  
    <table>
        <tr>
            <th>Ad</th>
            <th>Dogumu</th>
            <th>Boyu</th> 
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.AdSoyad |</td>
                <td>@item.DogumTarihi |</td>
                <td>@item.Boy |</td>  
            </tr>
        }
    </table>
 






20 Ekim, 2019
ulvivakaf3213.06.2018ulvi.jpg   ulvivaka
  Moderatör








FaceBook hesabınızla yorum yazabilirsiniz.
Lütfen Burayı Tıklayın


Disqus hesabınızla yorum yazabilirsiniz.
Lütfen Burayı Tıklayın