MVC’de Veri Akışı (Genel Bakış)
Controller → ViewBag → View | Controller → TempData → Redirect → Controller → View | Browser(User) ↔ Session (Server)
ViewBag Tek Request
Amacı: Controller’dan View’a küçük veri göndermek.
Ömrü: Tek istek (Redirect’te kaybolur).
Controller
public ActionResult Index()
{
ViewBag.Message = "Merhaba Dünya!";
return View();
}
View (Razor)
<h2>@ViewBag.Message</h2>
TempData Redirect Senaryoları
Amacı: Bir istekten diğerine veri taşımak.
Ömrü: Redirect sonrası bir kez daha okunur (aksi halde silinir).
Not: Keep() / Peek() ile koruyabilirsiniz.
Controller (Set & Redirect)
public ActionResult Kaydet()
{
TempData["Durum"] = "Kayıt başarıyla eklendi.";
return RedirectToAction("Index");
}
Controller / View (Read)
public ActionResult Index()
{
ViewBag.Mesaj = TempData["Durum"];
// TempData.Keep(); // tekrar kullanmak istersen
return View();
}
Session Kullanıcıya Özel
Amacı: Kullanıcıya ait verileri oturum süresince saklamak.
Ömrü: Oturum kapanana ya da süre dolana kadar.
Controller (Set)
public ActionResult Login(string username)
{
Session["KullaniciAdi"] = username;
return RedirectToAction("Index");
}
Controller / View (Read)
public ActionResult Index()
{
var ad = Session["KullaniciAdi"]; // null kontrolü yapın
return View();
}
Karşılaştırma Tablosu
| Özellik | ViewBag | TempData | Session |
|---|---|---|---|
| Veri Tipi | Dinamik | Key-Value | Key-Value |
| Ömrü | Tek Request | Redirect sonrası tek/okunana kadar | Oturum süresince |
| Kullanım Alanı | View’a küçük veri aktarma | Redirect sonrası mesaj/flag | Kullanıcıya özel kalıcı veriler |
| Notlar | Redirect’te kaybolur | Keep()/Peek() ile korunabilir |
Aşırı kullanım performansı etkiler |
Hangi Durumda Hangisini Kullanmalı? (Karar Ağacı)
Sonuç Olarak
Üç yapı benzer dursa da kapsam ve ömürleri farklıdır. ViewBag tek request, TempData redirect-köprüsü, Session ise kullanıcı-oturum durumudur. Doğru yerde doğru aracı seçmek hem performansı hem de okunabilirliği artırır.
