none
MVC Layout içerisinde ViewBag Kullanmak RRS feed

  • Soru

  • Arkadaşlar Ana Layout içerisinde yazdırmam gereken veriler var. Normal olarak bir Controller içerisinde ViewBag'e veri atayıp Controller'a bağlı bir Action'da kullanarak verileri görüntüleyebiliyorum.Fakat bunu Layout içerisinde yapamadım.Yardımcı olursanız sevinirim.
    16 Mayıs 2019 Perşembe 15:42

Yanıtlar

  • ViewBag ile olmaz. Layout'ta View yok.
    Önce HomeController'inizde bir Action oluşturun;

    [ChildActionOnly]
    public ViewResult KategoriMenu()
    {
       return View(dbContext.Kategoriler.ToList());
    }

    Daha sonra bunun view'ini oluşturun. Yalnız çok önemli layout'unu null yapın, yoksa iç-içe kendini sonsuza kadar render etmeye çalışır.

    @model IEnumerable<Kategori>
    @{
       Layout = null;
    }
    
    <ul>
    @foreach(var kategori in Model)
    {
        <li>@kategori.Ad</li>
    }
    </ul>

    Daha sonra Layout'unuzda, istediğiniz yere Html.Action ile render ettirin. Controller belirtmeyi unutmayın çünkü layout herhangi bir controller'e bağlı değil.

    <div>
    @Html.Action("KategoriMenu", "Home")
    </div>


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    16 Mayıs 2019 Perşembe 16:44

Tüm Yanıtlar

  • Controller ile Viewbag i dolduracaksınız ve bunu return edeceksiniz evet , ama gerekirse view üzerinden veritabanına bağlanabilirsiniz.

    view içerisinde @using projeadı.Models ve sonrası basitçe 

    using(someentities db = new someentities ){
    
     liste = db.Tabloadi.ToList();//listeyide tanımlayabilirsin view da (yazmadım)
    
    }

    Tabi burada ne bir pattern var nede kod çok düzgün değil :) (Tabi birde Default olarak entity framework kulalndığınızı düşündüm ama? )

    16 Mayıs 2019 Perşembe 16:00
  • ViewBag ile olmaz. Layout'ta View yok.
    Önce HomeController'inizde bir Action oluşturun;

    [ChildActionOnly]
    public ViewResult KategoriMenu()
    {
       return View(dbContext.Kategoriler.ToList());
    }

    Daha sonra bunun view'ini oluşturun. Yalnız çok önemli layout'unu null yapın, yoksa iç-içe kendini sonsuza kadar render etmeye çalışır.

    @model IEnumerable<Kategori>
    @{
       Layout = null;
    }
    
    <ul>
    @foreach(var kategori in Model)
    {
        <li>@kategori.Ad</li>
    }
    </ul>

    Daha sonra Layout'unuzda, istediğiniz yere Html.Action ile render ettirin. Controller belirtmeyi unutmayın çünkü layout herhangi bir controller'e bağlı değil.

    <div>
    @Html.Action("KategoriMenu", "Home")
    </div>


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com



    16 Mayıs 2019 Perşembe 16:44