Asp.NET MVC – ViewBag İle DropDownList Kullanım Kolaylığı
Sevgili okurlarım, bu yazımda Asp.NET MVC projelerinde DropDownList nesnesinden basit bir seçim işlemi yapmak için sizlere çok basit bir yöntem sunacağım.Genellikle Controller katmanımızda bir veri taşıyıcı aracılığıyla veri listemizi View katmanımıza gönderip, DropDownList nesnesinde listeliyoruz.Bu veri taşıyıcısı ViewBag veya ViewData gibi nesneler olabilir.Şimdilik bizim işimiz ViewBag nesnesi ile olacaktır.Gelin ViewBag ile DropDownList arasındaki kolaylığı tüm esnekliğiyle nasıl kullanabiliyoruz görelim.
Hızlı bir şekilde örneklendirme yapıp konuyu kapatacağım.
Aşağıda listelemede kullanacağımız örnek modelimiz mevcut.
class Ogrenci { public int ID { get; set; } public string Adi { get; set; } }
Yukarıdaki modeli bir liste şeklinde ViewBag nesnesine yüklediğimiz “Home(Controller).cs” sınıfımızı oluşturalım.
public class HomeController : Controller { public ActionResult Index() { List<Ogrenci> Ogrenciler = new List<Ogrenci> { new Ogrenci { ID = 1, Adi = "Gençay" }, new Ogrenci { ID = 2, Adi = "Selman" }, new Ogrenci { ID = 3, Adi = "Kübra" }, new Ogrenci { ID = 4, Adi = "Tuğba" }, new Ogrenci { ID = 5, Adi = "Seda" } }; ViewBag.Ogrenciler = new SelectList(Ogrenciler, "ID", "Adi"); return View(); } }
Son olarak aşağıda View katmanımızda bulunan “Index.cshtml” dosyasının içeriğini yazalım.
@Html.DropDownList("Ogrenciler", "Lütfen bir öğrenci seçiniz...")
Şimdi burada dönen mevzuya değinmeden önce projemizin derlenip çalıştırılmış haline bakalım.
Gördüğünüz gibi DropDownList nesnemizde istediğimiz şekilde verilerimiz listelenmiştir.Seçtiğimiz herhangi bir verinin ‘Value’ değerine ulaşıp istediğimiz işlemi gerçekleştirebiliyoruz.
Peki bu kadar basit olan bu işin sırrı nedir? diye sorarsanız eğer,
ViewBag nesnemize verdiğimiz isim ile DropDownList nesnemize verdiğimiz isim aynı olduğundan dolayı DropDownList nesnemiz dolu olarak gelmektedir.Yani, “ViewBag.Ogrenciler” komutunda ‘Ogrenciler’ ismiyle “@Html.DropDownList(“Ogrenciler“, “Lütfen bir öğrenci seçiniz…”)” komutundaki ‘Ogrenciler’ ismi aynıdır.Asp.NET MVC mimarisinde listeleme işlemi için kullanılan nesneler, Controller katmanında kendisiyle aynı isme sahip olan ViewBag nesneleriyle etkileşime girerek veri listeleme işlemini kolaylıkla gerçekleştirmektedirler.
Sonraki yazılarımda görüşmek üzere..
İyi çalışmalar..
Anlatım için teşekkür ederiz bir sorum olucak.
controllera post ederken sadece ID geliyor text alanlarını nasıl elde ederim teşekkürler.
Gelen ID değerine eş değer olan veriyi veritabanından elde edebilirsiniz.Örneğin, 3 ID si geldiyse eğer veritanında şu tabloda 3 ID sine sahip verinin tüm bilgilerini getir…
Merhaba,
kardeşim dediklerini yaptım güzel çalışıyor. dropdownlist’ten seçtiğimi veritabanına nasıl kayıt ederim?
Bahsettiğiniz işlemi yapabilmek için DropDownList nesnesinde bir eleman seçildiği anda tetikleme yapmanız gerekmektedir.Bunuda JavaScript ile gerçekleştirebilirsiniz.İlgili Controller tetiklendikten sonra seçilen elemanı veritabanına istediğiniz şekilde kayıt edebilirsiniz.
Açıkçası bunu yapamadım
get metodum :::::::
post metodum ::::::::
::::::::: viewim
nasıl yapmam konusunda bilgisi olan var mı ?
Kardeşim derdin nedir doğru düzgün ifade etsen belki sana ben yardımcı olabilirdim. Bu üşengeçliğe en fazla yorumunu yayınlarım.
webformda tasarladığım dropdownlist üzerinden veri tabanına nasıl kayıt yapabilirim
Merhabalar , viewbag ile dropdoenlist oluştururdum ama kodu çalıştırmaya kalktığımda resimdeki hatayı alıyorum nasıl bunu çözebilirim ?
http://i.hizliresim.com/RXdE8n.png
Merhaba Gökhan,
Kodu tam olarak paylaşır mısın?
Merhabalar, Eğer veritabanında veri yoksa o dropdown’un görünmesini gizleyebiliyor muyuz?
Merhaba,
Evet gizleyebiliyoruz.
ViewBag de liste içinde çoklu seçim yapabilmek için Multiple SelectList kullanılır.
Controller:
ViewBag.Personeller = new MultiSelectList( (_service.GetPersonels())
.Select(x => new SelectListItem
{
Text = x.Name+ ” ” + x.Surname+ ” ” + x.ID,
Value = x.idtPersonels.ToString()
}), “Value”, “Text”);
In View:
@Html.DropDownListFor(m => m.idtPersonels, (MultiSelectList)ViewBag.Personeller , new { @class = “form-control select2”, @multiple = true })
Detaylı öğrenmek için http://paylastikcaogren.blogspot.com/2015/06/viewbag-with-multiple-selectlist-in.html blogu ziyaret edilebilir.
Merhaba Gencay yine çok güzel anlatmışsın, bu anlatımında ki gibi kullandım ancan dropdown’a css class ı atayamadım, onu nasıl yapabiliriz?
Merhaba Ekrem,
Öncelikle nacizane yorumun için teşekkür ederim.
Sorunun cevabına gelirsek eğer,
örneklendirmeyi yazımızdakine benzer yapmam gerekirse aşağıdaki gibi bir ifade kullanman gerekecektir.
Benzer şekilde bu komutu ilgili yere yazıp @class=”” ifadesindeki yere css bildirimini yaparsan sıkıntın büyük ihtimalle çözülecektir.
Sevgilerimle…
Tamamdır Gencay hocam, dediğin gibi yaptım oldu. Teşekkürler emeğine sağlık.
Faydalandıysanız ne mutlu Ekren Bey…
Görüşmek üzere…
Peki Benim Çözemediğim Nokta Listeden Seçilen Değerin Value veya Text ini Nasıl Alacağımız. Teşekkürler.
Seçilen değeri post edeceksiniz. Ardından ilgili nesneyi formda yakalayıp değerini alacaksınız.
Merhaba Gençay Bey,
Öncelikle özgün ve güzel anlatımınız İçin teşekkürler gerçekten allah razı olsun diyorum ve sizi takip ediyorum bir sorum olacak normal bir select içinde hidden option kullanabiliyoruz burada da aynı şeyi yapma imkanı varmı?
Merhaba,
Öncelikle güzel iltifatlarınız için teşekkür ederim…
Sorunuza gelirsek eğer evet aynı şeyi yapabilme imkanınız vardır. foreach döngüsü aracılığıyla veri kümesinde tur atarak ilgili verileri option elemanlarına yazdırabilirsiniz.
Kolay gelsin.
Merhabalar,
Benim bir adet sorum olacaktı burada sizin anlatiminizda post islemini gerçekleştirdiğimiz de dropdowndaki değeri yakalayabilmek icin nesne ismini tam olarak ne yapmamız gerekiyor. Smdiden cevap için teşekkürler.
Çok yararlı bir paylaşım oldu benim için teşekkür ederim.
Merhaba hocam ben de viewbag ile layout a meta etiketleri için title ve description gönderiyorum lakin bazı türkçe karekterlerini kabul etmiyor. teşekkürler.