27 Aralık 2015 Pazar

MVC EntityFramework Bağlantısı, Bal-Dal Katmanları Ve Verilerin Listelenmesi

MVC projemizde Veritabanı ile çalışmak

Bu yazımızda veritabanı işlemlerini DAL katmanını ve alınan dataların listelenmesi işlemlerini anlatacağım daha onceki MVC yazımızın devamı netiliğinde olacaktır.
Veri tabanı ile haberleşme işlemini yaptığımız kod bloğunun bulunduğu katmana Data access Layer(dal) denir. Veritabanı ile haberleşmede EntityFramework kullanacağız. Peki entityFramework nedir dersek? Entityframework microsoftun ORM(object relational mapping) aracıdır.
Entityframework ile bizler aşağıdaki üç yaklaşımdan birini kullanırız
1. DatabaseFirst : Veritabanının hazır oluşturulduğu colonların tabloların ilişkilerin hazır olarak alınıp entityframeworkte kullanıldığı durumdur.(sadece verilen veritabanına uygun yapıyı üretiriz)
2. ModelFirst : Model sınıfının ve ilişkilerin visual studiodan oluşturulduğu entityframeworkun bize DAL  ve veritabanını (colon ve ilişkilerle birlikte) ürettiği yaklaşımdır.
3. CodeFirst : Herşeyin onceden code ile tasarlanıp yazıldığı yaklaşımdır. Uygulama ilk kez çalıştığında entityframework bizlere DAL ı aynı zamanda veritabanını colon ve ilişkiler ile birlikte ürettiği yaklaşımdır. 
Daha önceki çalışmalarımızı veritabanından bağmsız kendi oluşturduğumuz sınıflar ile yapmıştık bundan sonraki çalışmalarımızda veritabanını ve daha çok codefirst yapısını kullanarak ilerliyor olacağız bunun için işlemlerimize öncelikle yeni bir veritabanı oluşturarak başlamak istiyorum.
Bilgisayarımızda kurulu olan sql servera bağlanıp yeni bir veritabanı oluşturuyoruz.

Veritabanı oluşturma ve liste halinde gosterme
1.Sqlserver da database kısmına sağ tıklayıp CanliSatis Adında yeni bir veritabanı oluşturun.
2.Visual Studiomuzda projemizi açıp connectionString oluşturmak için Web.Config dosyasını açalım ve Configuration bolumunun içerisine
connectionStrings
add connectionString="Data Source=SAHIN;Initial Catalog=CanliSatis;Integrated Security =True"
name="CanliSatisDal"
providerName="System.Data.SqlClient"
connectionStrings
ifadesini ekliyoruz.
3.Projemize Entityframework u referans olarak ekliyoruz
Projemizin üzerine sağ tıklayıp->Manage Nuget packages diyoruz ve online kısmından entity framework aratıyoruz. Daha sonra install deyip projemize ekliyoruz.
4.Projemizin üzerine sağ tıkayip yeni klasor ekle diyoruz ve daha sonra bu klasorun icerisine CanliSatisDal diye bir class oluşturuyoruz.
Oluşturduğumuz sınıfın üstkısmında using olarak :using System.Data.Entity; referansını ekliyoruz daha sonra dbContext sınıfından miras alıyoruz.
public class CanliSatisDal:DbContext
{
}

5.Calisanlar sınıfımıza birincil anahtar ekleme islemini yapıyoruz. oncelikle using olarak
System.ComponentModel.DataAnnotations; ekliyoruz.Sonra key anahtarini gosteriyoruz
public class Calisanlar
{
[Key]
public string Ad { get; set; }
public string Soyad { get; set; }
public int Maas { get; set; }
public DateTime BaslamaTarihi { get; set; }
}

6. Simdi veritabani için maping işlemlerine başlıyoruz CanliSatisDal sinifimiza gidip OnModelCreating methodunu ezmemiz gerekiyor(override ediyoruz) using olarak proje adimizi ve model klasorumuzu ekliyoruz
using MVCSevenDayStart.Models;
public class CanliSatisDal:DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable("tblCalisanlar");
base.OnModelCreating(modelBuilder);
}
}
(Run time) çalışma zamanında otomatik olarak tblCalisanlar tablomuzu oluşturacaktır.
7.Database clasımızı uygulamamızda tutmak için CanliSatisDal sinifimiza birde çalışanları dbSet olarak ekliyoruz
public class CanliSatisDal:DbContext
{
public DbSet Calisanlar { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable("tblCalisanlar");
base.OnModelCreating(modelBuilder);
}
}

8.Simdi bir klasor daha ekliyoruz ismine Bal diyoruz ve içerisinde CanliSatisBal adinda bir klasor ekliyoruz. Daha once olusturdugumuz BusinessLayer(iş katmanı) içerisindeki kodu, verilerimiz databaseten gelecek şekilde değiştiriyoruz ve bu yeni sinifimiza ekliyoruz.(Bu işlemden sonra Model içerisindeki CalisanBusinesslayer sınıfını silebiliriz)
Tabiki ilk işlem olarak using sınıfını ekliyoruz. Bal sinifimiz aşagidadir
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using MVCSevenDayStart.Dal;
using MVCSevenDayStart.Models;
namespace MVCSevenDayStart.Bal
{
public class CanliSatisBal
{
public List GetCalisanlar()
{
CanliSatisDal canliSatisDal = new CanliSatisDal();

return canliSatisDal.Calisanlar.ToList();
}}}

Daha sonra bir hata alirsanız eger CalisanListController içerisine using olarak Bal klasorumuzu( using MVCSevenDayStart.Bal;) de eklemeyi unutmuyoruz.

CalisanlarListViewimizin son guncel hali
@using MVCSevenDayStart.Models
@model CalisanListViewModel
..
..
body div
Merhaba @Model.KullaniciAdi
div
div table tr
thCalisan Adi th
thMaasi th
tr
@foreach (CalisanViewModel item in Model.CalisanlarList)
{
tr
td@item.Ad td
td style="background-color:@item.CalisanRenk">@item.Maas td
tr
}
table div body
Eger derleme sonrasında sadece "Merhaba admin çalışan adi maasi"  yazan bir sayfa karşımıza geldi ise dogru adimları yapmışız :)

9.Simdi sqlserver tarafında veritabanımızı kontrol ediyoruz bakalım istedigimiz tblCalisanlar Sınıfımız oluştumu.

Evet adımları tektek yapı iseniz ve hata almadan çalıştırabildiyseniz sizinde tblCalisanlar sınıfınız oluşmustur ve simdi el ile birkac kayıt ekleyip tekrardan projemizi derleyelim. Eklediğimiz kayıtların listelendiğini görebiliriz.
Not:Hata almayan ve veritabanı oluşmayan arkadaşlar  içerisini tekrardan kontrol etmelerini oneririm burdaki yazım hataları bizim veritabanımızın oluşmasına engel olabilir.

Peki ya kullandığımız DbSet neyi ifade eder?
     Bizim veritabanından sorgu ile çektiğimiz tüm dataların tutulduğu, veritabanındaki tabloların temsil edildiği bir sınıfı ifade eder.Linq sorgusu yazdığımızda biz bu dbset nesnesini kullanırız oda veritabanındaki tablolara ceviri yaparak istedigimiz kolleksiyonları bizlere döndürür.
  
ConnectionString ve Dal arasındaki bağlantı nasıl olur?
Mapping işlemi connectionstring ifadesindeki name üzerinden yapılır. ConnectionStringName ve DalClass name aynı olduğu için otomatik olarak mapping "CanliSatisDal" gerçekleşir.

Simdi projemizde bazı değişiklikler yaparak katmanlı yapıyı daha anlamlı bir hale getirelim
İlk MVC Baslangic yazımızda anlattığımız bazı sınıfların isimlerini değistirelim ve daha anlamlı bir yapı oluşturalım.
* CalışanConroller olarak yeni bir controller olusturuyoruz ve icerisine index ile birlikte getcalisanlist action methodunu olusturuyoruz(CalisanListController icerisinden alabiliriz).
*Methodlara sağ tıklayıp add view diyoruz ve calisanview olusuyor icerisinde de iki methoda ait classlarımız olusuyor.
*GetCalisanDetay action methodumuzu yorum satirina alıyoruz Index methodumuzu yorum satırında ise yorum satırından çıkarıyoruz
*CalisanlarListViewModel içerisindeki calisanadi ozelliğini kaldırıyoruz. Ve Viewin içerisinde kullanılan alnıda kaldırıyoruz.
Son olarak SolutionExplorer goruntumuz aşağıdaki gibi oluyor


CalısanController.cs içerigi
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using MVCSevenDayStart.Models;
using MVCSevenDayStart.Bal;
namespace MVCSevenDayStart.Controllers
{
public class CalisanController : Controller
{

public ActionResult Index()
{
CalisanListViewModel calisanListViewModel = new CalisanListViewModel();

CanliSatisBal cnlsatisBal = new CanliSatisBal();
List calisanlarList = cnlsatisBal.GetCalisanlar();

List calisanViewModels = new List();

foreach (Calisanlar item in calisanlarList)
{
CalisanViewModel calisanViewModel = new CalisanViewModel();
calisanViewModel.Ad = item.Ad;
calisanViewModel.Soyad = item.Soyad;
calisanViewModel.Maas = item.Maas.ToString();
if (item.Maas > 1235)
{
calisanViewModel.CalisanRenk = "yellow";
}
else
{
calisanViewModel.CalisanRenk = "green";
}
calisanViewModels.Add(calisanViewModel);
}
calisanListViewModel.CalisanlarList = calisanViewModels;


return View("Index", calisanListViewModel);//-->View ismini degistiriyoruz
}

public ActionResult GetCalisanListesi()
{
CalisanListViewModel calisanListViewModel = new CalisanListViewModel();

CanliSatisBal cnlsatisBal = new CanliSatisBal();
List calisanlarList = cnlsatisBal.GetCalisanlar();

List calisanViewModels = new List();

foreach (Calisanlar item in calisanlarList)
{
CalisanViewModel calisanViewModel = new CalisanViewModel();
calisanViewModel.Ad = item.Ad ;
calisanViewModel.Soyad = item.Soyad;
calisanViewModel.Maas = item.Maas.ToString();
if (item.Maas > 1235)
{
calisanViewModel.CalisanRenk = "yellow";
}
else
{
calisanViewModel.CalisanRenk = "green";
}
calisanViewModels.Add(calisanViewModel);
}
calisanListViewModel.CalisanlarList = calisanViewModels;

return View("GetCalisanListesi", calisanListViewModel);
}

public string YaziYaz()
{
return "Merhaba Dunya’lı";
}
//müsteri donduren bir action method
//public Musteri getMusteri()
//{
// Musteri m = new Musteri();
// m.adi = "sahin";
// m.soyadı = "yaral";
// return m;
//}

//bir method içerisinde birden cok view çağırılabilir.
public ActionResult ilkView()
{
Random r = new Random();
int sayi= r.Next(0, 10);
if (sayi<5 br="">{
return Content(YaziYaz());
}
else
{
return View("Index");
}
}

//public ActionResult getCalisanDetay()
//{
// Calisanlar c = new Calisanlar();
// c.Ad = "safak";
// c.Soyad = "yaral";
// c.Maas = 1234;
// c.BaslamaTarihi = DateTime.Now;

// //viewdatamızı oluşturup çalısanımızı viewimize gonderiyoruz
// //ViewData["Calisan"] = c;
// //return View("Calisan");

// //viewdata yerine viewbag kullanımı
// //ViewBag.Calisanlar = c;
// //return View("Calisan");

// //genel olarak calisanlar sınıfını gondermek
// return View("Calisan", c);
//}
}
}
GetCalisanListesi.cshtml icerigi
Index.cshtml icerigi

F5  .../Calisan/Index sayfasına gittigimizde çalışanlarımızın listelendiğini gorebiliriz ayni zamanda .../Calisan/GetCalisanListesi ile de ayni listeyi elde edebiliriz.
Bu yazımızda database bağlantımızı ve kayıtları listeleme işlemini ele aldık bir sonraki yazımızda kayıt ekleme silme ve guncelleme işlemlerini ele alacağız
Kaynak :http://www.codeproject.com/Articles/986730/Learn-MVC-Project-in-days-Day

14 Aralık 2015 Pazartesi

MVC (model-view-controller) yeni başlayanlar için

     Bu yazımızda asp.net webform üzerinde biraz geliştirme yapmış ve daha önce asp.net MVC konusunu duymus fakat baslayamamıs olan arkadaşlarımıza giriş düzeyinde bir anlatım olacaktır.
     Bu işe yeni başlayan MVCyi yeni öğrenecek arkadaşlarımızın çoğunluğunun aklına ilk gelen asp.net MVC nin asp.net webformun gelişmiş hali veya yeni bir versiyonu olduğudur. Fakat bu kesinlikle yanlış bir düşüncedir. Fakat web form ile web uygulamaları yapılırken MVC bir mimari yaklaşımdır, bizim kodlarımızın daha doğru ve daha temiz olması mimari açıdan uygulamalarımızın daha hızlı daha güvenli çalışmasını sağlamaktadır.
     Microsoft Asp.net Webform dan sonra MVC mimarisi uzerinde Asp.net MVC geliştirdi. Bu gelişimi yaparken bizlere webformun ayrı MVCnin ayri tutulacağını ve birbirinin yerini almayacağını duyurmuştu. Bu nedenle ki günümüzde web uygulamaları hem webform ile yapılmakta hem de MVC ile yapılmaktadır. Tabi ki gelecekte web uygulamaların MVC üzerine inşaa edileceği öngörülüyor benim düşüncem de bu öngörünün doğru ve mantıklı olduğudur.
    Peki ya ASP.net Web Formu 12 yıldır populer kılan neden nedir?
    Bunun asıl nedenlerinden biri Microsoftun sahip olduğu vede tüm platformlarda kullandığı ide si VisualStudio. .Net yazılımcıları ilk yıllarından buya bu ide üzerinde uygulamalarını geliştirmiştir. Bunun yanında VB.net ten buyana süre gelen bir yazım alışkanlıkları vardır "Code Behind". Yazılımcılar kendi uygulamalarını UI tarafında sürükle bırak yöntemine alışmış ve daha sonra mantık ve veritabanı işlerini çift tık ile UI arkasına geçerek burada tamamlamışlardır. Bu nedenle web formlarda bir aspx ve birde aspx.cs uzantılı dosyalar mevcuttur. Bu şekilde kodlama bir süre sonrasında alışkanlık haline gelmiştir. Bu alışkanlıklardan günümüzde vazgeçmek hiçte kolay değildir.
    Her şey iyi güzel iken Web Formun sahip olduğu eksiklikler nelerdi?
    Web Formun en önemli iki eksikliğe de sahipti. Bunlar:
-Cevap süresi: yani serverın kullanıcının isteğine verdiği cevabın süresi
-Bant genişliği: Servera nekadar datanın gönderildiğidir.(Viewstate'tin fazla data taşıması sistemi ağırlastırmaktadır.)
MVC Contorller
1.  Yeni bir .net MVC projesi(empty) oluşturalım.
2.  Solution explorer dan controler klasorunun uzerine sağ tıklayım yeni controler ekleyelim
3. "MVC 5 Controller – Empty" seçip change authentication kısmından No authentication seciyoruz ve tamam diyoruz. MVC projemiz oluşuyor.
4.  Sıra yeni Controller eklemeye geldi. Controllers sekmesine sağtıklayıp add new Controller diyoruz ve MVC 5 Controller Empty seçiyoruz. Ismine TestController deyip tamam diyoruz.
5. Controller içerisine alttaki actionı ekliyoruz. 
public string YaziYaz()
{
return "Hello World is old now. It’s time for wassup bro ;)";
}
Run dedikten sonra Tarayıcımızda “ControllerName/ActionName” olarak çağırıyoruz. localhost:25654/Test/YaziYaz ve çıktısını goruyoruz :) 

Not: Buraya kadar sizlere .net webform ve asp.net MVC arasındaki ilişkiyi web formların eksik kısımlarını ve yeni bir MVC projesi oluşturup Merhaba Dunya yazmayi gosterdim. 

 TestControler ve Test ilişkisi
TestControler bizim classımızın ismidir Test ise bizim controllerımızın ismidir. Yani biz url de controller ismini yazmank istediğimizde sadece ../Test dememiz yeterli olacaktır.

Action method nedir
Bunlar controler içerisinde bulunan public methodlarımızdır. Kullanıcının istekte bulundugu ve bu isteğe karşı verilen yanıtları içerir.
Yukarıdaki örneğimizde YaziYaz() action methodumuz bizim string değer döndürür.
Web Form projelerinde geri dönüş tipleri html olurdu fakat .net MVC ile biz istediğimiz tipte bir geri dönüş değeri elde ederiz.

public class TestController : Controller
{
public string YaziYaz()
{
return "Hello World is old now. It’s time for wassup bro ;)";
}
//müsteri donduren bir action method
public Musteri getMusteri()
{
Musteri m = new Musteri();
m.adi = "sahin";
m.soyadı = "yaral";
return m;
}
}
public class Musteri
{
public string adi { get; set; }
public string soyadı { get; set; }
}
}
TestController icersine aşağıdaki kodları yazdıktan sonra tarayıcımızda projemizin (NameSpace.ClassName) uzantısını goruruz. Nedeni ise ToString() methodunu ezmemiş olmamızdır.

public class Musteri
{
public string adi { get; set; }
public string soyadı { get; set; }
public override string ToString()
{
return this.adi + "***"+ this.soyadı;
}
}
Yukarıdaki seklinde duzenleyip tekrar F5 yapıyoruz ve action methodtan istedigimiz donuş tipini elde ediyoruz. 
MVC View
Mimari olarak UI katmanıda denir. Kullanıcılara sunulan ara yüzü içermektedir.
1. TestController içerisinde GetView() adinda birtane ActionResult method oluşturalım.
2. Daha sonra bu GetView() uzerinde sağ tıklayarak AddView diyoruz.
3. UseLayoutpage secimini kaldırıyoruz ismini MusteriView olarak koyuyoruz ve add butonuna tıklıyoruz

Views->Test->MusteriView.cshtml olarak oluşturduğumuz viewi görebiliriz.
Not: F5 ile çalıştırma da dikkat edilmesi gereken iki nokta var
Eğerki view üzerinde debug ediyor iseniz controller tarafinda view adında ait bir methodunuz yok ise hata alırsınız!
Controler üzerinde debug ederseniz home klasörüne gider ve buradan siz kendiniz urli yazıp ulaşmalısınız.
Oluşturduğumuz bir method içerisinde durumu kontrol ederek istediğimiz view'i çağırabiliriz.
Aynı Sekilde bir view birden cok method tarafından çağırılabilir.

//bir methodiçerisinde birden cok view çağırılabilir.
public ActionResult ilkView()
{
Random r = new Random();
int sayi=r.Next(0, 10);
if (sayi<5 br="" clear="none">{
return View("YaziYaz");
}
else
{
return View("MusteriView");
}
}
ActionResult ve ViewResult Arasındaki bağlantı
ViewResult actionResult tın iki alt sınıfıdır. Nasıl iki alt sınıfı derseniz eğer: 
ViewResult ViewResultBase'in alt sınıfıdır. ViewResultBase ise actionResult'ın alt sınıfıdır. Burada polymorphism devreye giriyor. Aşağıdaki örneği inceleyelim
 public ActionResult ilkView()
        {
            Random r = new Random();
            int sayi=  r.Next(0, 10);
            if (sayi<5 br="" clear="none">            {
                return Content(YaziYaz());
            }
            else
            {
            return View("MusteriView");
            }
        }
Bu ornekte ActionResult kullandık çünkü ilk durum ViewResult döner iken ikinci durum ContentResult donuyor. ContentResult ta ActionResult'ın alt sınıfıdır. Bizde Polymorphism nimetlerinden faydalanıyoruz.

ViewResult ve ContentResult
ViewResult bizlere yanıt olarak tum htmli döndürmektedir fakat ContentResult ise bize dönüş değeri olarak sadece string degerler doner fakat ikiside actionResult sınıfındandir.

Not: ActionName ile ViewName eşit ise return view içerisine olusturdugumuz view in ismini yazmamıza gerek yoktur.
Routing
Bizim URLimizde yer alan değerlerin anlamsız rakam ve yazılar barındırmasını engeller. Yani sadece klasor goruntusunu verir ve son olarak bulundugumuz sayfanın ismini verir.
RouteConfig
Bizim routemap ayarlarımızın yapıldığı config dosyasıdır. Url haritamızın default değerleri ve routemap yapımızı belirleriz.Birden fazla maproute olusturabiliriz fakat name alanları birbirinden farklı olmalıdır.

MVC Model
Model bizim verilerimizin tutuldu sınıflardır. Örnek üzerinden inceleyelim
1. Model klasörüne sağ tıklayım add->new class diyoruz ve ilk model sınıfımızı oluşturuyoruz. İsmine Calısanlar diyoruz.
2. İçerisine adı soyadı maas ve baslama tarihi parametrelerini ekliyoruz.
public class Calisanlar
{
public string Ad { get; set; }
public string Soyad { get; set; }
public int Maas { get; set; }
public DateTime BaslamaTarihi { get; set; }
}
3. Controllerdan model sınıfımıza erisiyoruz. Erişebilmek için öncelikle using olarak model sınıfımızı eklemeyi unutmuyoruz. 
ViewData Bizim controller ve viewler arasında veri aktarımımızı sağlar.  asp.net ve mvc3 e kadar kullanılmıstır mvc3 ten sonra yerini dinamik yapıya sahip olan ViewBag almıştır.

public ActionResult getCalisanDetay()
{
Calisanlar c = new Calisanlar();
c.Ad = "safak";
c.Soyad = "yaral";
c.Maas = 1234;
c.BaslamaTarihi = DateTime.Now;

//viewdatamızı oluşturup çalısanımızı viewimize gonderiyoruz
ViewData["Calisan"] = c;
return View("Calisan");
}
4. Yeni bir view olusturmak icin getCalisanDetya() uzerine sağ tıklayip addview diyoruz ve ismine Calisan diyoruz.
5. ViewCalisanların içerisini aşağıdaki gibi düzenliyoruz ve f5 ile çalıştırıyoruz. 

Not: Tarayıcıda .../Calisan diye aratırsanız hata alırsınız çünkü controller icerisindeki action ismi ile view ismi farklıdır. Burada action ismini yazmamız gerekmekteri yani .../getCalisanDetay dediğimizde bu methodumuz bizi calısanlar viewine yonlendiricektir.
@{
Projeadi.Modelklasorunadi.Modelsınıfınızınadi cls = (Projeadi.Modelklasorunadi.Modelsınıfınızınadi)
ViewData["Calisan"];
}


Çalışan adı : @cls.Ad

Çalışan soyadı : @cls.Soyad

Çalışan maaş :@cls.Maas.ToString("C")

Çalışan giriş tarihi :@cls.BaslamaTarihi

Çalışan adı-soyadı :@(cls.Ad+” “+cls.Soyad)

ViewBag
C# 4.0 dan sonra geliştirilmistir. MVC3ten sonra viewdata nin yerini almıs ve viewdata nın dinamik hali olarak kullanılmaktadır. Yukarı ki örneğimizde değiştirmemiz gereken alanlar sunlardır:
Controller icerisinde yorumsatirina aldığımız kısım
//viewdatamızı oluşturup çalısanımızı viewimize gonderiyoruz
//ViewData["Calisan"] = c;
//return View("Calisan");
//viewdata yerine viewbag kullanımı
ViewBag.Calisanlar = c;
return View("Calisan");
View içerisinde yorum satırına aldığımız kısım
@*@{
MVCSevenDayStart.Models.Calisanlar cls = (MVCSevenDayStart.Models.Calisanlar)
ViewData["Calisan"];
}*@
@{
MVCSevenDayStart.Models.Calisanlar cls = (MVCSevenDayStart.Models.Calisanlar)
ViewBag.Calisanlar;
}
veya view icerisinde 
@{
@Model;
}

Çalışan adı : @Model.Ad

Çalışan soyadı : @Model.Soyad

Çalışan maaş :@Model.Maas.ToString("C")

Çalışan giriş tarihi :@Model.BaslamaTarihi
gibi bir değişiklik yaparsak çalışan detaylarına ulaşabiliriz. Daha fazla ornek için

View içerisine liste göndermek
1. Bunun için öncelikle yeni bir model oluşturalım ve adina CalisanviewModel diyelim.
public class CalisanViewModel
{
public string Ad { get; set; }
public string Soyad { get; set; }
public string Maas { get; set; }
public DateTime BaslamaTarihi { get; set; }
public string CalisanRenk { get; set; }
}
2. Daha sonra list model oluşturalim ve adına CalisanListViewModel diyelim.
public class CalisanListViewModel
{
public List CalisanlarList { get; set; }
public string KullaniciAdi { get; set; }
}

3. Yeni bir view oluşturalim ve adına CalisanlarListesi diyelim. Ve içerisini aşağıdaki gibi düzenleyelim.
@foreach (CalisanViewModel item in Model.CalisanlarList)
{

@item.Ad

@item.Maas

}
4. Simdi sıra projemizi bir basamak ilerletmeye geldi ve business layer katmanını olusturuyoruz. Bunun için model klasorunun içerisine CalisanlarBusinessLayer adinda bir sinif olusturuyoruz. Ve içerisine GetCalisanlar methodunu ekliyoruz.
public List GetCalisanlar()
{
List calisanList = new List();
for (int i = 0; i < 5;i++ )
{
Calisanlar cls = new Calisanlar();
cls.Ad = "sahin" +i;
cls.Soyad = " yaral"+i;
cls.Maas = 1234 +i*100;
calisanList.Add(cls);
}
return calisanList;
}

5. Sıra verilerimizi view icerisine gostermeye  geldi bunun için yeni bir controller oluşturuyoruz tabi isteyenler testController içerisindede yapabilirdi.Ve olusturdugumuz controller içerigini aşagıdaki gibi düzenliyoruz.
public ActionResult CalisanListesi()
{
CalisanListViewModel calisanListViewModel = new CalisanListViewModel();

CaslisanlarBusinessLayer clsBal = new CaslisanlarBusinessLayer();
List calisanlarList = clsBal.GetCalisanlar();
List clsViewModels = new List();
foreach (Calisanlar item in calisanlarList)
{
CalisanViewModel clsViewModel = new CalisanViewModel();
clsViewModel.Ad = item.Ad + " " + item.Soyad;
clsViewModel.Maas = item.Maas.ToString();
if (item.Maas > 1235)
{
clsViewModel.CalisanRenk = "yellow";
}
else
{
clsViewModel.CalisanRenk = "green";
}
clsViewModels.Add(clsViewModel);
}
calisanListViewModel.CalisanlarList = clsViewModels;
calisanListViewModel.KullaniciAdi = "Admin";
return View("CalisanlarListesi", calisanListViewModel);
}

simdi F5 deyip sonucu kontrol edebiliriz bende .../CalisanList/CalisanListesi altında gorunmektedir.

MVCde başlagıç seviyesinde bir girisimiz oldu.Sanırım birazda uzunca oldu :) Kaynaklar: