Asp.NET MVC İçerisinde Birden Fazla Model Nasıl Kullanılır ?

Herkese Selamlar ! Biraz hızlı bir giriş yapalım tatil dönüşü ve hemen bir yazı yayınlayalım github üzerinden yeni bir commit gönderelim. Bugünkü konumuzu başlıktan da anlayabiliyorsunuz. Normal de mvc üzerinde kodlarken aslında çok zorlayıcı bir durum ile karşılaşmadığımız müddetçe hep aynı şekilde yani kod yazıyoruz. Model içerisinde veri kaynağımız ya da sınıflarımız , controller tarafında model üzerinden aldığımız veriler ya da son kullanıcı için view alanına göndereceğimiz bilgiler son olarak view de ise göstereceğimiz son kullanıcı ile alakalı her şey. Böyle bir mantık ile ilerleyince view tarafında sadece tek bir model üzerinden ilerliyoruz . Her zaman durum bu şekilde gerçekleşmeyebilir. Zaman zaman bir view üzerinde birden fazla modelden faydalanarak daha açıklayıcı olmak gerekirse ayrı sınıflar içerisinde yer alan özellikleri(property) tek bir view üzerinde göstermek durumunda kalabiliriz. Böyle bir durum ile karşılaşınca nasıl çözüyoruz ?
Aslında mantık ciddi anlamda kolay. View tarafında kaç adet sınıfa ihtiyacımız var ise onların hepsini tek bir çatı yani tek bir sınıf içerisinde toplayıp onu gönderiyoruz view’a oluyor ve bitiyor. Örneğimizde ise artık sizlerin de iyice aşinalık kazandığı bir dummyDB olan Northwind veri tabanı üzerinden ilerliyorum. Entity Framework içerisinde dbFirst yaklaşımı ile ilerleyeceğim. Örneği biraz daha somutlaştırmak gerekirse Northwind veri tabanı için product tablosuna veri girişi yapmak istiyorsunuz fakat product tablosuna veri girişi yapabilmek için hem category seçebilmeli hem de o product i kim getiriyorsa onun supplier yani tedarikçisini girmek zorundasınız. Yoksa hata alacaksınız işte tam da bu durumda bir sayfa üzerinde hem categoryleri hem de supplierlari gösterebilmek için 2 farklı tipe ihtiyaç duyuyoruz. O yüzden ilk aşamada biz de Model klasörü içerisinde bir tane ViewModel isminde class açıyoruz. Gövdesinde ise IEnumerable olarak bir tanesi Category diğeri ise Supplier olacak şekilde kurguluyorum ki sadece ViewModeli gönderdiğimde ikisinide collection tabanlı bir yapı da gönderebileyim.

 

    public class ViewModel
    {
        public IEnumerable<Category> Categories { get; set; }
        public IEnumerable<Supplier> Products { get; set; }
    }
            

Takiben ise Home isminde bir adet controller ekliyorum. Controlleri ekledikten sonra Models klasörü içerisinde yer alan bazı classlara ihtiyaç duyacağımız için yukarıda ki kütüphanelerin arasına

 using MultiModelInMVC.Models; 

eklemeyi unutmayalım.

Tüm HomeControllerin içerisine ise aşağıda görmüş olduğunuz kodları yazmaktayız. Veri tabanı ile haberleşmek için NorthwindEntities üzerinden instance alıyoruz. Daha sonra ise içerisinde supplier ve categoryleri barındıran ViewModel classimizdan instance aliyoruz ve hemen ardından viewModel içerisinde yer alan IEnumerable tipinden olan Categories ve Suppliers propertylerinin üstüne elde etmiş olduğumuz verileri ToList() methodu ile dönüşümü gerçekleştirip Index ActionResultunun dönüş tipi olan return View(); ifadesini kullanarak view içerisine viewModelimizi gönderiyoruz. Bu sayede veriler tabiri caizse tek bir çatı altında view tarafına iletilmekte.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MultiModelInMVC.Models;

namespace MultiModelInMVC.Controllers
{
    public class HomeController : Controller
    {
        
        public ActionResult Index()
        {
            NorthwindEntities _db = new NorthwindEntities();
            ViewModel viewModel = new ViewModel();
            viewModel.Categories = _db.Categories.ToList();
            viewModel.Suppliers = _db.Suppliers.ToList();

            return View(viewModel);
        }
    }
}
            

Artık son bölümdeyiz yani Index isimli View içerisinde. View kısmında ciddi anlamda kolay işimiz. Sadece tek yapmamız gereken collection tabanlı olarak gelmiş olan verilerin üzerinde foreach döngüsü ile dönüp ekrana isimlerini bastırmak.

 

@model MultiModelInMVC.Models.ViewModel
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <h3>-------------CATEGORIES------------</h3>
    <div>
        <ul>
            @foreach (var item in Model.Categories)
            {
                <li>@item.CategoryName</li>
            }
        </ul>
    </div>
    <h3>--------------SUPPLIERS-------------</h3>
    <div>
        <ul>
            @foreach (var item in Model.Suppliers)
            {
                <li>@item.CompanyName</li>
            }
        </ul>
    </div>
</body>
</html>

            

Yazacağımız kodlar tam olarak bu kadar. Uygulamayı çalıştırdıktan sonra karşılaşacağımız ekran çıktısı ise ;

Bu yazılıkta bu kadar. Örneğin kodlarını ise github adresimden alabilirsiniz. Bu yazıyı post ederken dinlediğim şarkı ise ciddi anlamda beni her gün motive eden o gün için enerji toplamamı sağlayan bir şarkı , şiddetle tavsiye ediyorum dinlemenizi: Pitch Black Process Feat. Necati Karadayı – Halil İbrahim Sofrası . Yazımı okuduğunuz için çok teşekkür ederim. Sonra ki yazılarda görüşmek üzere hoşça kalın…

2 Responses to Asp.NET MVC İçerisinde Birden Fazla Model Nasıl Kullanılır ?

  1.  

    Çok açıklayıcı olmuş teşekkür ederiz.

    • Okuduğunuz için ben teşekkür ederim. =)

       

leave your comment

EnglishGermanTurkish