• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 23.04.2016 00:55:33C programlama 2 oyun
  • 20.04.2016 16:34:41Local Database
  • 15.04.2016 14:26:15Fatura kayıt işlemi
  • 21.03.2016 01:55:30C# problem

Popüler Sorular

  • 27.05.2012 05:49:50Asp.Net ile Date time alana veri ekleyemiiyorum ?
  • 2.04.2012 00:45:18.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 12.05.2012 08:44:49Acil Yardım
  • 27.05.2012 13:46:51veri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LINQ
  • LibreOffice
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

ASP.NET MVC - VIEWBAG, VIEWDATA, TEMPDATA

Controller ve View arasındaki veri alışverişini sağlayan ViewData nesnelerinin tanımı ve kullanımı

24.01.2014

Yazar: aliriza adiyahsi (Google+)

Kategori: ASP.NET MVC

2945

Controller sınıfları ve View sayfaları arasında veri taşımamıza yardımcı olacak nesneler vardır. Bunlardan en önemlisi ViewData, ViewBag ve TempData nesneleridir. Öncelikle kısaca tanımlama yapalım, ardından aralarındaki farkları ve ne zaman kullanılacağı konusunda tartışalım.

 

ViewData: Teknik olarak veri Controller sınıfından View sayfalarına ViewDataDictionary (ViewData) sınıfı ile taşınmaktadır. ViewData nesnesine veri aktarabilir ve bu veriyi okuyabiliriz.

    ViewData["CurrentTime"] = DateTime.Now;

 

ViewBag: ViewBag ise ASP.NET MVC 3 te C# 4 ile gelen dynamic anahtar kelimesinin getirdiği bir yeniliktir. ViewData nın dinamik (run time binding) halidir. Söz dizimi de daha iyidir.

    ViewBag.CurrentTime = DateTime.Now;

 

TempData: Bu nesne de diğer ikisinin yaptığı işi yapar.

    TempData["CurrentTime"] = DateTime.Now;

 

Bu üç nesne arasında küçük ve kritik farklar vardır. Örneğin ViewBag nesnesi dynamic tipinde bir nesne olduğundan bununla alakalı hatalar compile time da değil run time da yakalanır. Teknik anlamda ViewData nesnesinden farkı yoktur. Söz dizim olarak farklıdır.

En büyük ve önemli fark TempData ile diğer ikisi arasındadır. ViewData ve ViewBag nesnesi o anki HTTP istek içerisinde geçerlidir. Yaşam döngüsü bir sonraki isteğe kadardır. Ama TempData bir alt HTTP istek içinde geçerlidir. Yaşam döngüsü o anki ve bir sonraki HTTP istek içerinde geçerlidir. Daha iyi anlamak için farklı bir kaç örnek üzerinde görelim;

 

ÖRNEK 1

Üç nesnenin örnek kullanımı ve çıktısı.

Controller

public ActionResult Index()
{
    ViewBag.Message1 = "ViewBag mesaj!";
    ViewData["Message2"] = "ViewData mesaj!";
    TempData["Message3"] = "TempData mesaj!";
 
    return View();
}

View

<h2>@ViewBag.Message1</h2>
<h2>@ViewData["Message2"]</h2>
<h2>@TempData["Message3"]</h2>

Çıktı

    ViewBag mesaj!ViewData mesaj!TempData mesaj! 

 

ÖRNEK 2

TempData nesnesinin farklı özelliği.

Controller/Index

public ActionResult Index()
{
    ViewBag.Message1 = "ViewBag mesaj!";
    ViewData["Message2"] = "ViewData mesaj!";
    TempData["Message3"] = "TempData mesaj!";
 
    return RedirectToAction("About");
}

Contoller/About

public ActionResult About()
{
    var message = TempData["Message3"];
 
    return View();
}

Index metodu içerisinde oluşturduğumuz TempData About metoduna aktarılır ama diger iki nesne debug ta baktığımızda null olacaktır. TempData ile geçirdiğimiz veriyi About.cshtml içerisinde bir önceki örnekteki gibi kullanabiliriz.

TempData için sakıncalı bir durum yönlendirdiğimiz About sayfası içerisindeyken sayfası yenilediğimiz zaman veriyi kaybederiz. Bundan dolayı TempData yerine bu işlemleri daha sonra göreceğimiz ViewModel mantığıyla halletmeliyiz. İpucu olması açısından aynı işi yapan ViewModel mantığını da kodla örnekleyelim.

 

ÖRNEK 3

Controller/Index

public ActionResult Index()
{
    // veriyi veri tabanına kaydettikten sonra id sini alıyoruz
    var id = Repository.SaveData("foo");
    // diger sayfaya parametre olarak, veri tabanına son kaydettiğimiz kayıtın id sini veriyoruz.
    return RedirectToAction("About", "Home", new { id = id });
}

Contoller/About

// Index metodundan gelen id değerini alıyoruz.
public ActionResult About(string id)
{
    // gelen id değerinden tekrar kayıtı veri tabanından çekiyoruz.
    var model = new MyViewModel
    {
        Foo = Repository.GetData(id)
    };
    return View(model);
}

Neden veritabanına kayıt yapıp tekrar diğer sayfadan bu kayıta ulaşmaya çalışan bir örneği, önceki TempData örneğinin alternatifi olarak verdik. Çünkü gerçek hayatta aslında bir metottan diger metoda veriyi böyle bir senaryo için aktarmak isteriz. İleride yapacağımız örneklerle daha da açıklayıcı olacaktır.

Peki bu nesneleri ne zaman kullanmalıyız?
Model sınıfımıza ait bir veriyi açılır listeden (drop down list) seçeceksek bu listenin verisi için kullanabiliriz.
Küçük ölçekli veriler.
Kullanıcıya verilen uyarı mesajları.
Örneğin kullanıcı kayıt olduktan sonra kullanıcıya gösterilen profil özeti ekranı.
Kısacası geçici olarak tanımlayabileceğimiz küçük ölçekli verileri içeren bir çok iş için kullanabiliriz.

Yazar Hakkında

aliriza adiyahsi

aliriza adiyahsi

Sosyal Medya

ORANLAR

  • 2945izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Hocam Link başka sayfaya yönlendiriyor.
  • merhaba benim merak ettiğim bir konu var y...
  • Merhaba download linki çalışmıyor. Rica et...
  • Nevzat Bey selamlar, Açıkçası bizler a...
  • Parametreleri Cache İşleminden Yalıtma kon...

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 120005
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 65065
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 48255
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ