MVC Viewbag Sorunu

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    Selamlar Arkadaşlar,

     Mvc de Dynamic viewbag oluşturmaya çalışıyorum fakat hiçbir şekilde beceremedim.

     viewbag2 değişkenine gelen değerim --> { Prefix = p919ae39a77894cc2b280c7b7905cc9f8, IslemTur = Muayene } olsun.

     Bunu ViewBag = {ViewBags } şeklinde tanımladığımda "Cannot perform runtime binding on a null reference"  hatasını alıyorum. (edit : çözümü burda gibi geliyor)

     Fakat ViewBag = {Result = ViewBags } dediğimde çalışıyor ama view tarafında her defasında @ViewBag.Result.Prefix veya IslemTur diye almam gerekecek. ve kurduğum yapı buna müsait değil. @ViewBag.Prefix diye almam gerekiyor. 

     Bu konu hakkında bilgisi olan var mı hocalar, yardımcı olan müridlere şimdiden teşekkürler.

    Edit : Aceleyle yazdım  biraz karışık olduysa kusura bakmayın.

            public PartialViewResult LoadPartialView(string ViewName, dynamic ViewBags)
            {
                var a = new PartialViewResult
                {
                    ViewName = ViewName,
                    ViewBag = { ViewBags }
                    //ViewBag = { Result = ViewBags } şeklinde alıyorum fakat çözüm değil
                     /*
                    Normal Kullanımı da böyle
                     ViewBag = { 
                     Prefix = "1313121",
                     IslemTur = "Muayene"
                     }
                      */
                };
                return a;
            }

     

    saybirs tarafından 06/Eki/15 20:37 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    up

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KodlayanAdam
    KodlayanAdam's avatar
    Kayıt Tarihi: 01/Ekim/2005
    Erkek

    Neden bu şekilde kullanmadığını anlayamadım.

    ViewBag.Prefix = "1313121";

    ViewBag.IslemTur = "Muayene";

    KodlayanAdam tarafından 07/Eki/15 11:07 tarihinde düzenlenmiştir

    Hiç savaş görmemiş çocuklarla, hiç barış görüşmemiş çocuklar için adalet farklı anlamlar taşır.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KodlayanAdam
    KodlayanAdam's avatar
    Kayıt Tarihi: 01/Ekim/2005
    Erkek

    Test sonrası edit: ViewBag sadece ViewData içerisindeki verileri daha kolay almamızı sağlıyor. Koda parametre olacak ViewBag yerine ViewData yı gönderirsen sorunun çözülecek ve cshtml tarafında @ViewBag.Prefix yazarak değeri alabileceksin diye tahmin ediyorum.

    public PartialViewResult LoadPartialView(string ViewName, ViewDataDictionary ViewDatas)
    {
                var a = new PartialViewResult
                {
                    ViewName = ViewName,
                    ViewData = ViewDatas
                };
                return a;
    }
    KodlayanAdam tarafından 07/Eki/15 12:52 tarihinde düzenlenmiştir

    Hiç savaş görmemiş çocuklarla, hiç barış görüşmemiş çocuklar için adalet farklı anlamlar taşır.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    hocam ilgin için çok teşekkürler verdiğin mantığı biraz geliştirerek şöyle birşey yaptım ve oldu :)

       public PartialViewResult LoadPartialView(string ViewName, dynamic ViewBags)
            {
                PartialViewResult ViewResult = new PartialViewResult();
                foreach (var prop in ViewBags.GetType().GetProperties())
                {
                    ViewResult.ViewData[prop.Name] = prop.GetValue(ViewBags, null);
                }
    
                ViewResult.ViewName = ViewName;
                return ViewResult;
            }
       var Prefix = ViewBag.Prefix;
        var Muayene = ViewBag.IslemTur;
    



  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    KodlayanAdam
    KodlayanAdam's avatar
    Kayıt Tarihi: 01/Ekim/2005
    Erkek

    Sevindim hocam, kurduğun yapıyı bilmediğim için neden böyle birşeye ihtiyaç duyduğunu anlayamadım.

    Bu arada ilk yazdığım sonra değiştirdiğim koda göre yapmışsın, sonraki yazdığımdaki gibi parametreyi ViewBag yerine ViewData olarak gönderirsen reflection ve döngü kullanmayacağın için performanslı çalışacaktır. Sonuçta ViewBag ve ViewData birlikte çalışan propertyler.

     

    KodlayanAdam tarafından 07/Eki/15 14:27 tarihinde düzenlenmiştir

    Hiç savaş görmemiş çocuklarla, hiç barış görüşmemiş çocuklar için adalet farklı anlamlar taşır.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    saybirs
    saybirs's avatar
    Kayıt Tarihi: 24/Temmuz/2009
    Erkek

    hocam şimdi yaptığımız proje geniş çaplı olduğu için baya  ekran var ve alttaki kod daha tam geliştirilmemiş hali aklımda 2-3 fikir daha var. zaman buldukça buraya yazarım.

    LoadPartialView diye bir metot yazıp, basılacak tüm viewleri bu metot içerisinden geçecek  ve doğal olarak view'e gönderilecek parametreler değişken olacak.alttaki gibi kullanım olacak.

    /* BASE */
    public PartialViewResult LoadPartialView(string ViewName, dynamic ViewBags)
         {
             PartialViewResult ViewResult = new PartialViewResult();
             foreach (var prop in ViewBags.GetType().GetProperties())
             {
                 ViewResult.ViewData[prop.Name] = prop.GetValue(ViewBags, null);
             }
             ViewResult.ViewName = ViewName;
             return ViewResult;
         }

     

    /* KULLANIM*/    
     public PartialViewResult HastaKartAdresBilgisiPartial(string Prefix)
            {
                
                return LoadPartialView("Hasta/HastaKartAdresBilgisiPartial", new { Prefix = Prefix });
            }
    
    /* HastaKartAdresBilgisiPartial */
    
    @{
        var Prefix = ViewBag.Prefix;
    }

     
    Ayrıca şuana kadar yapılan ekranlar alttaki kod şeklinde çalışıyor ve view Ekranında @ViewBag.HastaId diyip alıyorum her defasında, Eğer ViewBag.SendData.HastaId almak zorunda kalsaydım bütün sayfaları değiştirmek zorunda kalacaktım ve her view farklı yerden geldiği için bakım maliyeti uçuşlara geçecekti 

    return new PartialViewResult
               {
                   ViewName = "Hasta/HastaKartAdresBilgisiPartial",
                   ViewBag = { _prefix = Prefix, hastaId = HastaID }
               };
     

     

     

     

    saybirs tarafından 07/Eki/15 14:41 tarihinde düzenlenmiştir
Toplam Hit: 1094 Toplam Mesaj: 7
mvc viewbag