Localhost Fitness Takip Uygulamam ASP.NET MVC
-
Github üzerinden kodu günceller misin? Sonra hangi kısmı diyorsan tekrar söyle kod üzerinden bakayım.
-
Abizittin bunu yazdı
hocalar tekrar merhaba
sorduğum ilk soruya viewbag, viewdata cevap olarak geldi. biraz araştırdım gayet güzel sorduğum soraya verilen cevap doğru.
sıkıntı şu; ben soruyu biraz eksik sormuşum.
cshtml içerisinde yaptığım sorgular where(antrenman => antrenman.antrenmanID == seciliKayitID) gibi bi alan içeriyor.
klasik makale sitesindeki kategori mantığıyla anlatmaya çalışayım. benim controller içerisinden view(obje) olarak yolladığım değer tüm kategorileri içeriyor. cshtml içerisinde kategorileri for döngüsüne sokup kategori idsine ait olan yazıları bulmak için tekrar sorgulama yapıyorum. benim bu sorguyu controller içerisine almam mümkün mü?
controller içerisinde kategorileri for döngüsüne sokmam ve her döngüde yeni bi viewbag tanımlayıp buna cshtml içerisinden yine bi for döngüsü ile erişmeye çalışmam çok mu amatörce olur?
var kategoriler = dbContext.Kategoriler.ToList(); for(int i=0; i < kategoriler.Count; i++) { ViewBag.kategoridekiYazi[i] = dbContext.Yazilar.Where(yazi => yazi.kategoriID == kategoriler[i].kategoriID).ToList(); }
bu kullanım mümkün mü mantıklı mı daha iyi bi yöntem var mı?
Hocam öncelikle viewbag, tempdata bunları kullanmanı pek önermem. mümkün mertebe action'dan view'a model geçir. böylece kodun daha derli toplu olur. öbür türlü ortalık çöplüğe dönüyor ve view'da ne var, action'dan view'a ne geçti parametre parametre bakman gerekir. güzel durmaz.
Doğru anladım mı emin değilim ancak, amacın bulunulan kategorilerdeki yazıları sayfada göstermekse; direk controller'da dbContext.Kategoriler.Where(kosul).ToList() seklinde List'e alıp bunu view'e geçirmen gerekiyor. tüm yazıları alıp, bunu view'da for'la döndürmek yada yine aynı mantığı controller'da yapman hammallık. where koşulunu direk ilk sorgunda kullanabilirsin.
-
@Hannibal_King güncelledim hocam. HomeController içerisindeki Index methodu ve index.cshtml dosyalarına bakabilirsen demek istediğimi göreceksindir.
@TeRRoR evet hocam dediğin gibi ortalık biraz karışıyor. Tekrar anlatayım. Index methodunun return View(antrenmanlar) ile antrenmanları gönderiyorum. cshtml içerisinde bunu for döngüsüne sokuyorum, döngü içerisinde antrenmandaki hareketlerin olduğu tabloya ait sorguyu yapıyorum antrenmanID değerini kullanarak, hareketler için de bir for döngüsü oluşturuyorum, bu döngü içerisinde de bu hareketID ye ait setlerin kaydının tutulduğu tabloya sorgu yapıyorum.
-
Attığın resimden yola çıkarak.Nasıl bir viewmodel class ı oluşturabiliriz diye düşündüm.Öyle bir viewmodel class ı oluşturalım ki dashboard için ne gerekiyorsa
hepsini içinde barındırsın.
Projenin root un da ViewModels isimli bir klasör oluşturdum.
İçinede WorkoutFullDetail isminde bir sınıf koydum.Bu sınıfı öyle bir organize edicezki sen dashboard üzerinde hangi verileri göstericeksen yada hangi verilere
ihtiyacın varsa sadece onları taşıyacak.
Fiziksel olarak .cs uzantılı bir dosyamızın içine 1 den fazla sınıf koyabiliriz.Java ile çalışıyor olsaydık 1 fiziksel dosya ya sadece 1 adet sınıf koyabilecektik.
ViewModel sınıfımızı hazırladık.
Sonra Controller içinde join ve altsorgular ile ihtiyacım olan herseyi çekiyorum.
View katmanında hiç gereksiz c# kodu yok sadece foreach var. Sorgu falan yok yani view katmanında.Test etmedim veritabanı yok diye.
Resimleri sıra ile atıyorum.
View resminin alt kısımları sığmadı alt kısmın gözüktüğü şekilde atıyorum tekrar.
Test etmedim ama %99 sorun yoktur hocam.
Hannibal_King tarafından 13/Eyl/17 15:08 tarihinde düzenlenmiştir -
@Hannibal_King hacı alıntılamadım mesajını sayfa şişmesin diye. Projede PR'ını göremedim, PR oluşturabilir misin.
-
Githubda hiç pull request atmadım daha önce, github nasıl kullanılır o konuda da zayıfım :) Bi deniyeyim bakalım.
Edit: Şimdi kurcalıyorum hocam. 1-2 saate çözerim heralde.
-
Attım bir pull request TeRRoR hocam.
-
hocam detaylı yanıtın için çok teşekkür ederim. githubtan da PR ı mergeledim.
ancak şöyle bi sıkıntı oluyor derleyip çalıştırdığımda:
The entity or complex type 'FitnessWebAppModel.Antrenmanlar' cannot be constructed in a LINQ to Entities query.
biraz googleladım sorun hakkında.
söylenen şey entity frameworkün bu işlemin şu an yaptığımız şekilde yapılmasını desteklemiyor olması deniyor. entity frameworkün veritabanındaki Antrenmanlar adında tanımladığı modelin dışına çıkmaya çalıştığımızdan sanıyorum. stackoverflowdaki sorulan diğer sorulara gelen çözümlerden çıkardığım şey şu:.Select(p => new WorkoutFullDetail() { } yerine
.Select(p => new { } kullanmamız gerektiği. bu da senin yaptığın WorkoutFullDetail modelini boşa mı yapmış olduğunu gösteriyor anlamadım. senin oluşturduğun model üzerinden bu sorguyu ne şekilde düzeltmeliyiz?
-
Yok yok sadece () kısmını siler misin? Constructor a izin vermiyor sanırım.
Linq ifadelerindeki bu 3 ifadenin de () kısmını siler misin?
new WorkoutFullDetail()
new Antrenmanlar()
new AntremanKayit()
-
Hannibal_King bunu yazdı
Yok yok sadece () kısmını siler misin? Constructor a izin vermiyor sanırım.
Linq ifadelerindeki bu 3 ifadenin de () kısmını siler misin?
new WorkoutFullDetail()
new Antrenmanlar()
new AntremanKayit()
dediğin şekilde yaptım ancak aynı hatayı veriyor hocam.