Asp.Net Models
Asp.net mvc projelerinde controller veriyi yönetir. En basitiyle veritabanına bağlanmak için gereken kodları controller içerisinde yazarız ve controller elde ettiği verileri html sayfasında göstermek için bu verileri view üzerine aktarması gerekir. Çünkü view kendisine gönderilen bilgiyi html etiketleriyle birleştirip bir görüntü oluşturmakla görevlidir. Dolayısıyla bu senaryoda controller içerisinde elde edilen bilgiyi view' e taşımak için bir model kullanmamız gerekir.
Asp.Net Model Tanımlama
List action metodunda bir ürün dizisi tanımlayalım.
public IActionResult List() { string[] urunler = { "samsung s20", "samsung s21", "iphone 13" }; return View("ProductList", urunler); }
urunler dizisini View() metodunun ikinci parametresiyle view' e gönderiyoruz.
ProductList.cshtml dosyasında ise view' den gönderilen modelin veri tipini @model ile tanımlıyor olmamız gerekiyor.
@model string[] <h1>Ürün Listesi</h1> <ul> <li>@Model[0]</li> <li>@Model[1]</li> <li>@Model[2]</li> </ul>
view' in modeline erişmek için @Model komutunu kullanıyoruz. Model bir string dizisidir dolayısıyla her bir model elemanına indeks numarasıyla erişip sayfaya yazdırabiliriz.
Ancak tabi ki view üzerinde bir döngü yardımıyla tüm model elemanlarını ekrana kolaylıkla yazdırabiliriz.
@model string[] <h1>Ürün Listesi</h1> <ul> @foreach (var urun in Model) { <li>@urun</li> } </ul>
Peki basit bir diziyi model olarak kullandık ancak gerçek senaryolarda daha kapsamlı veriye ihtiyaç duyarız dolayısıyla veriyi daha düzenli bir şekilde taşımak için bir sınıf oluşturalım.
Model sınıflarını projede Models klasörü içerinde barındırıyoruz.
public class Blog { public int Id { get; set; } public string Title { get; set; } public string Description { get; set; } }
Blog sınıfından türetilen bir nesne sayfadaki bir blog kaydını temsil etsin. İlk aşamada sadece tek bir blog bilgisini view üzerine taşıyalım.
using BlogApp.Models; using Microsoft.AspNetCore.Mvc; namespace BlogApp.Controllers { public class HomeController : Controller { public IActionResult List() { var urun = new Blog() { Id = 1, Title = "blog başlığı 1", Description = "blog açıklama 1" }; return View("ProductList", urun); } } }
urun modeline view üzerinden ulaşalım. Burada model tek bir blog nesnesine karşılık geldiğinden dolayı bir döngü kullanmadığımıza dikkat edelim.
@model BlogApp.Models.Blog <h1>Ürün Listesi</h1> <div> <h1>@Model.Title</h1> <p>@Model.Description</p> </div>
Şimdi ise; view' e bir blog listesi gönderelim. İlk olarak bir blog listesi tanımlayalım ve view üzerine bu modeli gönderelim.
public IActionResult List() { var urunler = new List<Blog>() { new Blog() { Id = 1, Title = "blog başlığı 1",Description = "blog açıklama 1"}, new Blog() { Id = 2, Title = "blog başlığı 2",Description = "blog açıklama 2"}, new Blog() { Id = 3, Title = "blog başlığı 3",Description = "blog açıklama 3"} }; return View("ProductList", urunler); }
Artık view model bir blog listesi. Dolayısıyla List<BlogApp.Models.Blog> tanımlamasını yapmalısınız.
@model List<BlogApp.Models.Blog> <h1>Ürün Listesi</h1> <div> @foreach(var urun in Model) { <h2>@urun.Title</h2> <p>@urun.Description</p> } </div>
Ekran çıktısı ise;
Peki bu aşamaya kadar asp.net mvc' nin temel bileşenleri olan model, view ve controller nedir, öğrendik. Bu aşamadan sonra ekstra özellikleri incelemeye başlayalım.