ASP.NET MVC View

ASP.NET MVC içerisinde gelen isteklere cevap olarak dönen View katmanı ViewBag, ViewData, TempData, viewmodel ve razor kullanımı ile ilgili bilgiler yer alıyor.

View nedir?

ASP.NET MVC ile hazırlanan web sayfalarına gelen istekler Routing ile alınarak Controllor katmanına iletilir.

Controllor katmanı da isteğe göre Model katmanına veri ekler veya veri alır.

İşlem sonucunu Controller dönüş türüne göre bir değer döndürür.

Web sayfaları için bu genellikle View metodu yani ViewResult nesnesidir.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

View metodu çalıştırıldığında Views/Controller/Action ve Shared/Controller/Action dosyalarına bakar. (Controller = Home, Action = Index)

Bu dosyalar View katmanı olarak tanımlanır ve içerisinde yer alan değerler kullanıcıya gönderilir.

Veri taşıma

Controller katmanındaki veriler View katmanına gönderilerek View Engine ile sayfaya dahil edilir.

Verileri View katmanına göndermek için Controller sınıfında yer alan ViewData, ViewBag ve TempData özellikleri kullanılabilir.

ViewData

Controller sınıfında yer alan ViewData özelliği verileri Dictionary veri türünde object olarak saklar.

public ActionResult Index()
{
    ViewData["FirstName"] = "Yusuf";
    ViewData["LastName"] = "SEZER";
    return View();
}

Veriler sayfa içerisinde aşağıdaki gibi dönüşüm işlemi yapılarak kullanılır.

Merhaba ben @Convert.ToString(ViewData["FirstName"]) @Convert.ToString(ViewData["LastName"])

Olmayan bir değer kullanıldığında veya Controller içerisindeki değer değiştirildiğinde değer null olacağından hata oluşacaktır.

ViewBag

Controller sınıfında yer alan ViewBag verileri Dynamic veri türünde saklar.

C# 4 ile gelen ve dinamik dillerin bir özelliği olan çalışma zamanında tür belirleme özelliğine göre çalışır.

public ActionResult Index()
{
    ViewBag.FirstName = "Yusuf";
    ViewBag.LastName = "SEZER";
    return View();
}

Veriler sayfa içerisinde aşağıdaki gibi dönüşüm işlemi yapılmadan kullanılır.

Merhaba ben @ViewBag.FirstName @ViewBag.LastName

Veri türü çalışma zamanında belirlendiğinden tekrar veri türü dönüşümüne ihtiyaç duymaz.

Olmayan bir değer kullanıldığında ViewData gibi hata vermez.

TempData

TempData, ViewData gibi verileri Dictionary veri türünde saklar.

Ancak olmayan bir değer veya isim değişikliği sonrası hata oluşmaz.

TempData controller veya sayfalar arası veri taşıma işlemi içinde kullanılır.

public ActionResult Index()
{
    TempData["FirstName"] = "Yusuf";
    TempData["LastName"] = "SEZER";
    return RedirectToAction("sayfa2");
}

public ActionResult Sayfa2()
{
    return View();
}

Sayfa2 View içeriği aşağıdaki gibidir.

Merhaba ben @Convert.ToString(TempData["FirstName"]) @Convert.ToString(TempData["LastName"])

TempData sayesinde Sayfa2 içerisinden Index içerisinde oluşturulan değerlere ulaştık.

ViewModel

Controller içerisinde yer alan ViewData, ViewBag ve TempData özellikleri küçük boyutlu veriler için ideal iken büyük boyutlu verilerde ViewModel yönteminin kullanımı faydalı olacaktır.

Bu yöntem temel olarak kullanılacak değerler için bir sınıf oluşturmaya dayanır.

public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Daha sonra bu sınıf içeriği Controller içerisinde doldurularak View metoduna parametre olarak verilir.

@model ProjeAdi.ViewModels.PersonViewModel

Merhaba ben @Model.FirstName @Model.LastName

Bu yöntemin diğer yöntemlerden farkı oluşacak hataların hemen bulunmasını ve düzenli bir geliştirme yapmayı sağlamasıdır.

Razor

View katmanına gönderilen veriler yukarıdaki gibi basit veriler olabileceği gibi list, directory gibi veri türleri veya özel hazırlanmış sınıflarda olabilir.

Bu durumda View katmanında bu veriler listelemek için değişken, döngü, koşul kullanımına ihtiyaç duyulur.

Bunun için View katmanında Template Engine veya View Engine olarak adlandırılan yapılar kullanılır.

Bu yapılar temel olarak View içerisinde değişken, döngü ve koşul kullanılmasına imkan verir.

ViewModel içeriği aşağıdaki gibidir.

public class PersonViewModel
{
    public List<string> Kisiler { get; set; } = new List<string>();
}

Controller içeriği aşağıdaki gibidir.

public ActionResult Index()
{
    ViewModels.PersonViewModel model = new ViewModels.PersonViewModel();
    model.Kisiler.Add("Yusuf");
    model.Kisiler.Add("Ramazan");
    model.Kisiler.Add("Sinan");
    model.Kisiler.Add("Mehmet");
    return View(model);
}

View içeriği aşağıdaki gibidir.

@model ProjeAdi.ViewModels.PersonViewModel

@if (Model.Kisiler.Count == 0)
{
    <text>Değer bulunamadı.</text>
}
else
{
    foreach (var kisi in Model.Kisiler)
    {
        <p>@kisi</p>
    }
}

View katmanında View Engine sayesinde koşul ve döngüleri kullanabildik.

İyi bir ASP.NET MVC yapısı için ViewModel kullanmak faydalı olacaktır.

Ancak ihtiyaç halinde ViewData, ViewBag ve TempData özellikleri de kullanılabilir.

.NET Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!