Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

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.
Asp.NET MVC DropDownList ViewBag

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..

Bunlar da hoşunuza gidebilir...

23 Cevaplar

  1. samet ersoy dedi ki:

    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.

    • Gençay dedi ki:

      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…

  2. Melih KIZILAY dedi ki:

    Merhaba,
    kardeşim dediklerini yaptım güzel çalışıyor. dropdownlist’ten seçtiğimi veritabanına nasıl kayıt ederim?

    • Gençay dedi ki:

      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.

      • yusufcankaya dedi ki:

        Açıkçası bunu yapamadım

        get metodum :::::::

             public ActionResult Create()
                {
                    List durumlar = new List
                    {
                        new Durum { Id =1, Ad = "Çözüldü" },
                        new Durum { Id =2, Ad = "Anlamadım" },
                        new Durum { Id =3, Ad = "Çözeceğim" },
                        new Durum { Id =4, Ad = "Boşver" },
                        new Durum { Id =5, Ad = "Yapılamıyor" },
                    };
                    ViewBag.durumlar = new SelectList(durumlar, "Id", "Ad");
                    return View();
                }
        

        post metodum ::::::::

                public ActionResult Create([Bind(Include = "PID,PStart,PDurumu,PAciklama")] Problem problem)
                {
                    if (ModelState.IsValid)
                    {
                        db.Problem.Add(problem);
                        db.SaveChanges();
                        return RedirectToAction("Index");
                    }
        
                    return View(problem);
                }
        

        ::::::::: viewim

                    @Html.LabelFor(model =&gt; model.PDurumu, htmlAttributes: new { @class = "control-label col-md-2" })
                    
                        @*@Html.DropDownList("durumlar","Durum Seçiniz")*@
                        @Html.DropDownListFor(model =&gt; model.PDurumu, (SelectList)ViewBag.durumlar)
                        @Html.ValidationMessageFor(model =&gt; model.PDurumu, "", new { @class = "text-danger" })
        

        nasıl yapmam konusunda bilgisi olan var mı ?

        • Gençay dedi ki:

          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.

      • Ahmet Faruk dedi ki:

        webformda tasarladığım dropdownlist üzerinden veri tabanına nasıl kayıt yapabilirim

  3. gökhan dedi ki:

    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

  4. Arda dedi ki:

    Merhabalar, Eğer veritabanında veri yoksa o dropdown’un görünmesini gizleyebiliyor muyuz?

  5. Arzu dedi ki:

    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.

  6. Ekrem ÖZER dedi ki:

    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?

    • Gençay dedi ki:

      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.

      @Html.DropDownList("Öğrenciler",null, "Lütfen bir öğrenci seçiniz",new { @class="" })
      

      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…

  7. Recep dedi ki:

    Peki Benim Çözemediğim Nokta Listeden Seçilen Değerin Value veya Text ini Nasıl Alacağımız. Teşekkürler.

  8. Ahmet tunçel dedi ki:

    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ı?

    • Gençay dedi ki:

      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.

  9. alperyalin dedi ki:

    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.

  10. Reborn dedi ki:

    Çok yararlı bir paylaşım oldu benim için teşekkür ederim.

  11. izzet dedi ki:

    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.

yusufcankaya için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir