folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Localhost Fitness Takip Uygulamam ASP.NET MVC



Localhost Fitness Takip Uygulamam ASP.NET MVC

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    hocalar selam.

    asp.net ile mssql veritabanı kullanarak kendi antrenmanlarımın kaydını tutmak için localhostta çalışan bi uygulama yazdım.

    GitHub linki

    Ekran görüntüleri

    böyle bi şeye gerek var mıydı? hayır. halihazırda bunu yapan telefon uygulamaları var.

    amacım başından sonuna kadar tasarlayıp, kendime ufak deadlinelar koyarak kendimi geliştirmek.

    ne öğrendim?

    1. Entity framework CRUD işlemleri (update içeren bi kısmı yok ama olsun)
    2. Responsive tasarım (temel flex)
    3. CSHTML, routing(temel), farklı controller ile çalışma.
    4. Az biraz exception handling. (aslına bakarsanız baya az)

    merak edip işin ustalarına sormak istediklerim:

    1. return View() içerisine nasıl birden fazla parametre gönderebilirim? örneğin dashboard ekranında antrenmanlar, hareketler ve setleri listeleniyor. cshtml içerisinde sorgulama yapmak pek doğru gelmiyor bana?
    2. Action controllera link gönderdiğimde (örn: /Action/SetSil/12) id değeri girmezsem uygulama patlıyor. Sebebi action controller içerisinde public ActionResult SetSil(int id) şeklinde kullanıyor olmam. Burada id girilmezse diye nasıl bi exception handling uygulayabilirim? Fonksiyon içerisinde if(id == null) kullanmak problemimi çözer mi?
    3. Action controller içerisinde antrenman, antrenmandaki hareketler, hareketlere ait setleri silmek için 3 kez dbContext.SaveChanges() kullanıyorum. Buna gerek var mı? En sonda bi tane SaveChanges() kullanmam yeterli olur mu? 3 kez kullansam ilerde başıma iş olur mu?
    4. Action controller içerisine formdan post ettiğim verilere ideal ulaşma yöntemim nasıl olmalı? public ActionResult FonksiyonAdi(VtTabloAdi degisken) şeklinde entitye ait alanlara karşılık gelen değerleri alabiliyorum ama modelden bağımsız veriler post etmek istersem ne kullanmalıyım bilmiyorum.
    5. Daha genel bi soru sormak gerekirse bi amatöre göz önüne alındığında kodlama açısından ne tarz yanlışlarım var, neler öğrenmeliyim?

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Hannibal_King
    Hannibal_King's avatar
    Kayıt Tarihi: 22/Ağustos/2010
    Erkek

    Soru-1: Action method dan view a (yani ilgili .cshtml uzantılı dosyamıza) nasıl veri aktarabilirim?

    Cevap-1: Bunun 3-4 farklı yolu var.Sen kendi kodunda sürekli olarak View metodunu View(Object) parametreli versiyonu ile çağırmışsın.Yani view a bir model gönderiyorsun.

    Sonrada o modele viewda erişiyorsun.Bu yöntemlerden 1 tanesi.Bunun dışında ViewData ve ViewBag de kullanabilirsin.

     

    https://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/11/06/what-are-viewdata-viewbag-and-tempdata-in-asp-net-mvc.aspx   bu linkten bakabilirsin.TempData

    başka birşey.Linkte oda anlatılmış.Diyelim bir action method içinde veritabanından 3 tane farklı veri cektin.Antremanlar, Hocalar , Gittiğin günler mesela bu 3 unu cektin

    Burada bunlardan Antremanları view methoduna parametre olarak gecebılırsın. Hocalar ve Gittiğin günleride ViewBag ile view e gönderebilirsin.Yani istersen Viewbag , ViewData ve

    View(model) i kullanarak view e veri atayabilirsin.

     

    Soru-1-a) View(model) kullanmasam sadece View() yazsam veritabanından cektiğim 3 veri listesinide ViewBag ile göndersem olur mu?

    Cevap-1-a) Evet olur.Action metodu acarsın verileri cekersın.Sonra View() in üzerine

    ViewBag.antremanlar = tumAntrenmanlar; 

    ViewBag.hocalar = tumHocalar;

    ViewBag.gunler = gittiğimGunler;

    Bunları yazarsın sonra .cshtml dosyanda @viewbag.hocalar dersin mesela erişirsin.

     

    Soru-1-b) Viewbag ve viewdata kullanmak istemiyorum ben illaki View(model) şeklinde verileri view a aktarıcam ama 3 tane farklı listem var nasıl yapıcam?

    Cevap-1-b) Projene ViewModels isminde bir klasör ekle içerisinede bi sınıf ekliycez sınıfın ismi DashboardVerileri olsun bu sınıfın 3 tane veri elemanı olsun.

    Bunlar List<Hocalar> hocList, List<Antremanlar> antList, List<GittigimGunler> gunList olsun mesela sonra action method içinde hemen methodun başında 

     

    DashboardVerileri dv = new DashboardVerileri(); diyerek nesneni yarat.Sonra 

    dv.hocList = hocalarigetir();

    dv.antList = antremanlarıgetir();

    dv.gunList = gunlerigetir();

     

    return View(dv);

     

    Şimdi sen ne yaptın ihtiyacın doğrultusunda bir sınıf yarattın.Onuda projende ViewModels klasörünün içine koydun.Yani aslında DashboardVerileri isminde bir tablon var mı veritabanında?

    Hayır yok.Ama View a farklı farklı verileri gönderme ihtiyacı hissettin.Bu yüzden bir sınıfta bu verileri topladın.Aslında bu sınıfa DashboardVeriViewModel desek daha anlamlı olur.

     

    Ek bilgi: View methodunun overloadları https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view(v=vs.118).aspx

     

    Soru-2: Action method çalışmadan hemen önce onun parametrelerine erişmek ve onları kontrol etmek istiyorum.Nasıl kontrol edebilirm? Method içinde kontrol etsem olur mu işe yarar mı?

    Cevap-2: Hayır method içinde kontrol edersen işe yaramaz zaten programın akışı o noktaya gelmeden patlıyor.int id demişsin ama id değerine null gönderiyorsun.Bununda şuan aklıma gelen 2 çözümü var.

     

    Basit çözüm: int? id yazman lazım yani sadece int in sonuna 1 adet soru işareti koyucaksın. Yani sen int? yazdığında sanırım derleyici onu Nullable<T> türünden bir yapıya dönüştürüyor. Ve artık 

    id ye erişmek istediğinde önce kontrol ediceksin

     

    if (id.hasvalue)

    {

    var değer = id.value;

     

    }

    şeklinde action methodun içinde kullanabilirsin.

     

    Uzun çözüm: Asp.net mvc de filters isminde bir konu var.Yani filtreler.Filtreler bir çeşit özel attributelar.Sen bir action methodun çalışmasından hemen önce çalışacak bir filtre yazabilirsin.

    Bu çözümde daha fazla şeyi kontrol edebilirsin tabi. Mesela id nullsa ve  200-300 arasındaysa method çalışmaz.Sadece id değeri 1-100 arasındaysa çalışır mesela böyle şeyleri ayarlayabilirsin.

     

     

    Soru-3: dbContext.SaveChanges() hangi durumlarda çağrılmalı?

    Cevap-3: Duruma göre değişir.Birbiri ile bağlantılı tablolar vardır.Araya transaction falanda koyarsın. Önce bi tabloya veri eklenmesi gerekiyodur.Eklenen verinin id değerine ihtiyacın olacaktır.Bu tarz

    durumlarda savechanges i 2 defa cagırabılırsın mesela.Gerçi 1 kere çağırsanda sorun olmayabılır. Senin uygulama için en sonda 1 kere çağırsan yeterli gibi duruyor.

     

     

    Soru-4: View dan Controller a veri aktarma nasıl yapılır?

    Cevap-4: Zaten model yöntemini biliyorsun.Bunun haricinde html elemanlarının name isimli attribute una bir isim yazıyorsun.Diyelim 3 adet input type="text" var. Bunların name attributelerıne birer isim ver.

    Sonra action method içinde bu isimleri argüman olarak yazıcaksın. Mesela public actionresult methodadi(string isim1,string isim2,string isim3) bu şekilde viewden gelecek olan verileri yakalayabilirsin.

     

    Ayrıca action method içinde Request.Form["input un name attrıbute adı"];  yazarsanda yakalarsın view dan gelen veriyi.1 tane daha yöntem vardı sanırım şimdi aklıma gelmedi.

     

    Soru-5: Öneriler

    Cevap-5: C# bilgini artırmaya çalış. Fonksiyon kelimesini unut, c# ile çalışırken method kelimesini kullanıyoruz. C ile çalışsaydık o zaman fonksıyon diyecektik. kod yazma standartı , dizayn patternı vs o konularda çok fazla 

    bilgim yok.

     

     

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    hocam yanıtların için teşekkür ederim.

    ilk soruya verdiğin yanıtla ilgili verdiğin linkten başlayarak biraz araştırıcam.

    diğer yanıtların yeterince açıklayıcı olmuş zaten.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Dark_Lord
    Dark_Lord's avatar
    Kayıt Tarihi: 23/Ağustos/2005
    Erkek

    @Abizittin ilk yıldızın bende. Tebrik ederim ve başarılarının devamını dilerim.


    "biz televizyon izleyerek, milyonerler, sinema tanrıları, rock yıldızları olacağımıza inanarak büyüdük ama olamayacağız... hepimiz heba oluyoruz... bütün bir nesil benzin pompalıyor, garsonluk yapıyor ya da beyaz yakalı köle olmuş... reklamlar yüzünden araba ve kıyafet peşindeyiz... nefret ettiğimiz işlerde çalışıyor, gereksiz şeyler alıyoruz..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek

    Hocam eline sağlık. .gitignore dosyası eklemende fayda var projeye. .gitignore'dan sonra packages'ıda silersin. zaten Nuget yüklüyor paketleri. Clone süresi gereksiz uzar. Kodlara bakma fırsatım olmadı. Birde ReadME koyabilirsen çok güzel olur.

    Hocam kodlarını gözden geçirdim.

    Öncelikle Türkçe kullanmaktan vazgeç. En azından method ve değişken isimlerinde kullanma. Yorum satırlarında Türkçe yazmaya devam edebilirsin. Method'lara yorum satırı ekleyeceksen // şeklinde değil, /// ile yorum ekle. Birde veritabanında birden fazla silme işlemi yapıyorken Transaction kullanımı için ufak bir değişiklik yaptım. Ona bakarak diğer yerlerde varsa eğer, oralardada kullanabilirsin. Pull Request açtım github'da yazdıklarıma istinaden ama test etme fırsatı bulamadım. Ayrıca 

    dbContext.Entry(antrenmanKayit).State = EntityState.Added;

    buradaki kullanımı 

    dbContext.AntrenmanKayitlari.Add(antrenmanKayit);

    şeklinde neden yapmadığını merak ettim hocam.

    Başarılar...

    TeRRoR tarafından 11/Eyl/17 11:01 tarihinde düzenlenmiştir

    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    @Dark_Lord hocam teşekkür ederim. sağolasın yıldız için de.

    @TeRRoR çok teşekkürler hocam pull için. ben senin yerine denicem kodları. EntityState neden kullanıyorum bilmiyorum. sanırım tutoriallardan kalma bi alışkanlık. tavsiyeler için de ayrıca teşekkürler.

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    Abizittin bunu yazdı

    @Dark_Lord hocam teşekkür ederim. sağolasın yıldız için de.

    @TeRRoR çok teşekkürler hocam pull için. ben senin yerine denicem kodları. EntityState neden kullanıyorum bilmiyorum. sanırım tutoriallardan kalma bi alışkanlık. tavsiyeler için de ayrıca teşekkürler.

    Rica ederim hocam. fazlada kodlarını kurcalamak istemedim. yine aklına takılan yerlerde yazarsan pullrequestle ilerleriz. bence güzel ve eğitici bir yöntem seçmişsin kendine. hem ihtiyacı karşılayan birşey yapıyorsun. hemde öğreniyorsun. ilerleyen dönemde webapi ekleyip mobil'de öğrenebilirsin bu proje ile.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    eyv hocam yorumların için.

    herkesin öğrenme metodu farklı oluyo. ben uzun bi süre önce yaparak öğrenme yönteminin benim için en uygunu olduğunu farkettim hep de öyle yapıyorum hem daha eğlenceli oluyo.

    önümüzdeki bi kaç gün view içerisine veri göndermeyi ve transaction konusunu biraz daha detaylı araştırıp uygulamaya çalışıcam.

  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iKlotho
    iKlotho's avatar
    Kayıt Tarihi: 06/Haziran/2015
    Erkek

    Never skip leg day bro :P


    Too weird to live, too rare to die.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

    farketmen anlamlı olmuş hocam :D omuzun altına onu da sıkıştırıyorum :)

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Abizittin
    Abizittin's avatar
    Kayıt Tarihi: 19/Haziran/2008
    Erkek

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

Toplam Hit: 4448 Toplam Mesaj: 37
mssql entity framework fitness asp.net mvc responsive