ÖN BİLGİ
ASP.net MVC’de model katmanı adı üzerinde olduğu gibi bilginin modellendiği katmandır. Örneğin elinizde okula ait bilgiler var ve bunu bir şekilde programlama dilinizde kullanmak istiyorsunuz eğer ki ASP.net MVC’de çalışıyorsanız ilk olarak bu veriyi modellemeniz lazım. Modelleme işlemi daha çok veritabanına paralel bir şekilde yapılır çünkü hemen hemen tüm web tabanlı uygulamalarda veriler veritabanında tutulur. Veritabanına paralel veri modelleme işlemi de veritabanındaki tabloyu modelde class olarak yazmaktır. Örneğin Kayıtlar adında bir veri tablomuz var ise ve kolonları Ad,Soyad,Numara olduğunu varsayalım. Bu bilgiyi model katmanında modellerken Kayıtlar.cs adında bir class oluşturup public string Ad{get; set;} , public string soyad{get; set;}, public string Numara{get; set;} şeklinde modelleriz. Tabi veritabanına paralel modelleme işlemine bu yazımda çok fazla değinmicem çünkü veritabanına paralel modelleme yaptığınız zaman işin içerisine ORM – Entity Framework girecektir.
BAŞLANGIÇ
Bu yazımda statik verilerle modelleme yapıcaz.
* Model katmanına Ogrenci.cs Adında bir class oluşturarak başlayalım.
public class Ogrenci
{
public int Id {get; set;}
public string Ad {get; set;}
public string Soyad{get; set;}
public string TCKimlikNo {get; set;}
public string BolumAd{get; set;}
public int GirisYil {get; set;}
}
bu şekilde Ogrenci verisini modellemiş olduk olay aslında bundan ibaret. Normalde yaptığımız OOP mantığıyla da düşünebilirsiniz. Bir öğrenci class’ımız var kendine ait Ad,soyad,TC vs vs. si var ve her yaratılan yaşayan öğrenci nesnesi bu propertyleri kendine has bir şekilde dolduracak.
Şimdi solutionumuza Veri adında bir klasör açalım. Normalde veritabanından çekmemiz gereken bilgileri şuan statik veriler üzerinde çalışacağımız için buradan çekicez. Veri folder’ımızın içerisine OgrenciVeri adında bir class oluşturalım ve aşağıdaki gibi statik verilerimizi oluşturalım.
public class OgrenciVeri
{
public static List<Ogrenci> Ogrenciler = new List<Ogrenci>
{
new Ogrenci{Id=1,Ad="Neslihan",Soyad = "Yagmur",BolumAd="Tıp",TCKimlikNo="11111111111",GirisYil=2010},
new Ogrenci{Id=1,Ad="Neslihan",Soyad = "Yagmur",BolumAd="Tıp",TCKimlikNo="11111111111",GirisYil=2010},
new Ogrenci{Id=1,Ad="Neslihan",Soyad = "Yagmur",BolumAd="Tıp",TCKimlikNo="11111111111",GirisYil=2010}, };
}
bu classta yaptığımız olay sadece statik veri oluşturmaktan ibarettir. Bir adet Ogrenciler adında List’imiz var ve içerisine Ogrenci tipinde (oluşturduğumuz Ogrenci classı nesnesi) veri alıyor. 3 adet de elemanı var.
Şimdi modellediğimiz bu Ogrenci verileri üzerinde birkaç işlem yapalım.
1. KAYIT LİSTELEME
OgrenciController adında bir controller oluşturup içerisine Action metodumuzu koyalım.
public class OgrenciController : Controller
{ public ActionResult Listele()
{ return View(OgrenciVeri.Ogrenciler); }
}
Yukarıda yaptığımız olay verileri listelemek adına yapılmıştır. ActionResult metodumuza sayfaya döndürmesi için OgrenciVeri klasörünün içerisindeki Ogrenciler listesi yollanmıştır. Şimdi metoda sağ tıklayıp Add View seçeneğini seçelim. Template’sini List , Modelini de Ogrenci tanımladıktan sonra iş tamamdır. Listeleme View’ını otomatik olarak önümüze getirecektir.
2. YENİ KAYIT OLUŞTURMA
Aynı controllerin içerisine Yeni adında bir Action metot daha oluşturulaım.
public ActionResult Yeni()
{
return View();
}
Controlleri oluşturduktan sonra yapacağımız işlem bu controller tarafından yönetilen bir view oluşturmak. Controllerimizin isminin üzerine sağ tıklayıp “Add View” seçeneğini tıklayıp Template’i Create Model’i Ogrenci olan bir view oluşturalım. Bu oluşturulan view yeni Ogrenci eklemek için yeterli değil. Bildiğiniz gibi web iki temel işlem üzerine çalışır GET ve POST işlemi. Burda post ettiğimiz yeni ogrenciyi tekrar başka bir controller tarafından yakalanması lazım.
[HttpPost] public ActionResult Yeni(Ogrenci yeniOgrenci) { OgrenciVeri.Ogrenciler.Add(yeniOgrenci); return RedirectToAction(“Listele”); }
Peki yukardaki controller ne işe yarıyor? Bir üstteki controllerin overload’ıdır o controller tarafından post edilen yeni öğrenci kaydını alır ve OgrenciVeri klasörünün altındaki Ogrenciler listesine ekler. Daha sonrasında return RedirectToAction(“Listele”); sayesinde de yeni öğrenciyi ekler eklemez Listele actionuna geri döner.
3. KAYIT DÜZENLEME
Bu başlıkta eklenen Ogrenci kayitlarinda nasıl düzenleme yapacağımızı konuşucaz. Bunun için yine bir Duzenle actionResult methodu oluşturalım.
public ActionResult Duzenle(int id)
{
var ogrenci = OgrenciVeri.Ogrenciler.Where(o = o.Id == id).FirstOrDefault();
return View(ogrenci);
}
var ogrenci = OgrenciVeri.Ogrenciler.Where(o => o.Id == id).FirstOrDefault(); bu ifadenin anlamı , listeye ait ‘ o ‘ adinda bir Ogrenci nesnesi oluşturduk. Bu bir gezicidir. Tüm elemanlari yani listeye ait ogrencileri gezer. Gezdiği sırada ne zaman ki ID’si bizim parametre olarak aldığımız id’ye eşit olan bir öğrenci kaydı yakalar. O öğrenciyi var ogrenci değişkenimize atar. FirstOrDefault(); ifadesi de eğer birden fazla kayıt var ise ilk karşına çıkanı yok ise default null’ı değişkene at demektir. Ancak zaten burda id üzerinden gittiğimizden birden fazla aynı ID’li öğrenci olma ihtimali yoktur ancak Id dışında bir değer üzerinden de gidebilirdik.
Daha sonra herzaman yaptığımız gibi bu action methoda ait Template’i Edit Model class’ı Ogrenci olan bir View oluşturalım. Farkettiğiniz gibi bu View sadece tıkladığımız kaydı algılayıp ekrana ve değişkene atamak üzere yazılmıştır. Yaptığımız değişiklikleri tekrar serverside’a post edebilmek için bir tane de post actionResult’u yaratmamiz gerekmektedir.
[HttpPost]
public ActionResult Duzenle(Ogrenci ogrenci)
{
Ogrenci duzenlenecekOgrenci = OgrenciVeri.Ogrenciler.Where(o => o.Id == ogrenci.Id).FirstOrDefault();
duzenlenecekOgrenci .Ad = ogrenci.Ad;
duzenlenecekOgrenci .BolumAd = ogrenci.BolumAd;
duzenlenecekOgrenci .GirisYil = ogrenci.GirisYil;
duzenlenecekOgrenci .Soyad = ogrenci.Soyad;
duzenlenecekOgrenci .TCKimlikNo = ogrenci.TCKimlikNo;
return RedirectToAction("Listele");
}
Yeni olarak düzenlediğiniz öğrenci kaydını post ettiğinizde bu actionResult tarafından yakalanır ve düzenlenmiş öğrenci kendi ID’siyle uyumlu olan önceki kayıtla değiştirilir ve tekrar Listele view’ina geri döner.
4. KAYIT SİLME
Oluşturduğumuz öğrenci kayitlarini nasıl sileceğimize de biraz değinelim.
public ActionResult Sil(int id)
{
var ogrenci = OgrenciVeri.Ogrenciler.Where(o=> o.Id ==id).FirstOrDefault( );
return View();
}
ActionResult Sil(..) metodu silmek istediğimiz ogrenci kaydini yakalayıp ekrana yazdırır.
[HttpPost]
public ActionResult Sil(Ogrenci ogrenci)
{
Ogrenci silinecekOgrenci = OgrenciVeri.Ogrenciler.Where( o => o.ID = ogrenci.Id).FirstOrDefault( );
OgrenciVeri.Ogrenciler.Remove(silinecekOgrenci);
return RedirectToAction("Listele");
}
Actionresultta post edilen öğrenci bilgileri Listtekiyle eşlenerek bulunup silinmekte daha sonra da tekrar listele view’ına yönelmektedir.
5. KAYIT GÖRÜNTÜLEME
public ActionResult Detay(int id)
{
var ogrenci = OgrenciVeri.Ogrenci.Where( o => o.Id == id).FirstOrDefault( );
return View( ogrenci );
}
Add View, Template Details , Model Class Ogrenci.