folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Asp.Net Mvc 4 Veri Listeleme Problemi



Asp.Net Mvc 4 Veri Listeleme Problemi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Diathorus
    Diathorus's avatar
    Kayıt Tarihi: 19/Mayıs/2014
    Erkek

    Selam arkadaşlar,

    İş yerimdeki bir projeden dolayı Asp.Net Mvc öğreniyorum. Web Forms' ta baya tecrübeliyim fakat Mvc' de çok basit bir konuda takıldım. Hemen sorunuma geçeyim.

    Veri tabanıım hazır. Orm olarak Entity Framework kullanıyorum. Sayfamda istediğim veriyi listelemek istiyorum fakat hata alıyorum.

    HomeControllerim var Index Metodum aşağıdaki şekilde.

    var Article = (from x in Context.Articles
    orderby x.ArticleId descending
    where x.IsActive == true
    select new { x.Title, x.Date, x.ArticleId, x.Picture }).Take(9);
    return View(Article);

    Index View' im aşağıdaki şekilde.

    @model IEnumerable<MvcLinq.Models.Article>
    
    @{
        ViewBag.Title = "Index";
    }
    
    <ol>
        @foreach (var item in Model)
        {
            <li>
                @item.Title
            </li>
        }
    </ol>

    Sayfamı çalıştırdığımda aşağıdaki hatayı alıyorum.

    The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[emreblog_mvc.Models.Article]'.

    Controller içerisindeki sorgumu aşağıdaki gibi değiştirirsem hata ortadan kalkıyor.

    var Article = (from x in Context.Articles
    orderby x.ArticleId descending
    where x.IsActive == true
    select x).Take(9);

     

    Article tablosundaki tüm kolonları çekersem problem olmuyor ama sadece bana lazım olan kolonları çekmeye çalışırsam hata alıyorum.

    Yardımınızı bekliyorum Mvc ile ilgili sormak 2 farklı soru daha var.

    Teşekkür ederim.

    Diathorus tarafından 05/Tem/15 11:18 tarihinde düzenlenmiştir
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    selam,

    ilk sorgunda dönen tipin generic olması soruna sebep oluyor gördüğüm kadarıyla

     

    var Article = (from x in Context.Articles
    orderby x.ArticleId descending
    where x.IsActive == true
    select new Article { x.Title, x.Date, x.ArticleId, x.Picture }).Take(9);
    return View(Article);
    

    yaparsan çalışması gerekiyor

     

     

    unbalanced tarafından 05/Tem/15 11:36 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek
    select new { x.Title, x.Date, x.ArticleId, x.Picture }
    
    

    "Select" yaptığın zaman buradan sana geriye senin ienumerable "Article" nesnen dönmez, orada belirttiğin kolonları içeren yeni bir nesne yaratılıp dönderilir, bu durumda da belirttiğin casting hatasını alırsın.

     Şöyle dene;

    var article = Context
    			.Articles
    			.Where(x => x.Active)
    			.OrderByDescending(x => x.ArticleId)
    			.Take(9);
    
    return View(article);

     


    Ehl-i Byte
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Diathorus
    Diathorus's avatar
    Kayıt Tarihi: 19/Mayıs/2014
    Erkek
    trampfd bunu yazdı
    select new { x.Title, x.Date, x.ArticleId, x.Picture }
    
    

    "Select" yaptığın zaman buradan sana geriye senin ienumerable "Article" nesnen dönmez, orada belirttiğin kolonları içeren yeni bir nesne yaratılıp dönderilir, bu durumda da belirttiğin casting hatasını alırsın.

     Şöyle dene;

    var article = Context
    			.Articles
    			.Where(x => x.Active)
    			.OrderByDescending(x => x.ArticleId)
    			.Take(9);
    
    return View(article);

     

    Selam dostum,

    Senin dediğin gibi yaptığım zaman problem ortadan kalkıyor mesajımda da bahsetmiştim zaten. Bu söz diziliminin sql çıktısı

    " Select Top(9)* From Article Where IsActive = 1 Order By ArticleId DESC " şeklinde oluyor.

    Fakat bana sadece 4 kolon lazım diğerleri lazım değil.

    Bu şekilde yapmak için yeni Article model oluşturmam lazım 4 kolonluk.

    İyi de bu saçma değil mi ben her durum için sürekli yeni model mi oluşturcam yada sürekli Select * From mu demek zorunda kalcam?

     

    Diathorus tarafından 05/Tem/15 12:00 tarihinde düzenlenmiştir
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Diathorus
    Diathorus's avatar
    Kayıt Tarihi: 19/Mayıs/2014
    Erkek
    unbalanced bunu yazdı

    selam,

    ilk sorgunda dönen tipin generic olması soruna sebep oluyor gördüğüm kadarıyla

     

    var Article = (from x in Context.Articles
    orderby x.ArticleId descending
    where x.IsActive == true
    select new Article { x.Title, x.Date, x.ArticleId, x.Picture }).Take(9);
    return View(Article);
    

    yaparsan çalışması gerekiyor

     

     

    Selam,

    Olmadı şu şekilde hata alıyorum.

    Error 1 Cannot initialize type 'emreblog_mvc.Models.Article' with a collection initializer because it does not implement 'System.Collections.IEnumerable' D:\Projeler\emreblog-mvc\emreblog-mvc\Controllers\homeController.cs 20 47 emreblog_mvc

     

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    dışardayım şuan, çözemezsen aksam bakalım teamviewerdan. class article ise hem classı hem değişken ismini aynı şekil yazman sorun olabilir. 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    trampfd
    trampfd's avatar
    Kayıt Tarihi: 10/Mayıs/2006
    Erkek
    Diathorus bunu yazdı
    trampfd bunu yazdı
    select new { x.Title, x.Date, x.ArticleId, x.Picture }
    
    

    "Select" yaptığın zaman buradan sana geriye senin ienumerable "Article" nesnen dönmez, orada belirttiğin kolonları içeren yeni bir nesne yaratılıp dönderilir, bu durumda da belirttiğin casting hatasını alırsın.

     Şöyle dene;

    var article = Context
    			.Articles
    			.Where(x => x.Active)
    			.OrderByDescending(x => x.ArticleId)
    			.Take(9);
    
    return View(article);

     

    Selam dostum,

    Senin dediğin gibi yaptığım zaman problem ortadan kalkıyor mesajımda da bahsetmiştim zaten. Bu söz diziliminin sql çıktısı

    " Select Top(9)* From Article Where IsActive = 1 Order By ArticleId DESC " şeklinde oluyor.

    Fakat bana sadece 4 kolon lazım diğerleri lazım değil.

    Bu şekilde yapmak için yeni Article model oluşturmam lazım 4 kolonluk.

    İyi de bu saçma değil mi ben her durum için sürekli yeni model mi oluşturcam yada sürekli Select * From mu demek zorunda kalcam?

     

    Tamam o zaman arkadaşın dediği şekilde yaparsın ama orada syntax hatası var, "Article" nesnenin propertylerine karşılık gelecek şekilde atama yapman lazım, şu şekilde dene;

    select new Article { Title = x.Title, Date = x.Date, ArticleId = x.ArticleId, Picture = x.Picture }).Take(9);

     

     


    Ehl-i Byte
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    acemi-webci
    acemi-webci's avatar
    Kayıt Tarihi: 11/Haziran/2008
    Erkek

    hocam viewe datayı anonymous tipinde gönderiyorsun, new { x.Title, x.Date, x.ArticleId, x.Picture } bu kısımda artık çektiğin data Articles modelinde dönmüyor. Belirsiz tip yaratıyorsun ve view de article tipinde data gelecek diyorsun.
    iki yolu var bu işin;

    1. bir view modeli oluşturursun

    class YeniViewModelin{

    pulic sctring Title{get;set;}

    pulic DateTime Date {get;set;}

    pulic int ArticleId {get;set;}

    pulic sctring Picture {get;set;}

    }

    linq;

    new YeniViewModelin{ Title = x.Title, Date = x.Date, ArticleId = x.ArticleId, Picture = x.Picture }

    view;
    @model IEnumerable<MvcLinq.Models.YeniViewModelin>

    2. yöntem iste expando object olarak gönderirsin, bi tür dynamic aslında.

    yazmaya üşendim şu link işini görür: http://stackoverflow.com/questions/5120317/dynamic-anonymous-type-in-razor-causes-runtimebinderexception


    ...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    sen tipsiz bişey verirsen adama nasıl map'licek propertyleri :D

    http://stackoverflow.com/a/10465897

    şurda dynamic proxy i nasıl maplersin anlatmış tek method yetiyor zaten. 

    https://github.com/AutoMapper/AutoMapper

     

    Not: dur ben basit bişey yapmıştım maplemek için bi deniyim çalışırsa onu atıyım

    SinusX tarafından 05/Tem/15 15:33 tarihinde düzenlenmiştir

    Si vis pacem para bellum.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Diathorus
    Diathorus's avatar
    Kayıt Tarihi: 19/Mayıs/2014
    Erkek

    Arkadaşlar sağolun paylaştığınız bilgiler için çok faydalı oldu. 2. sorumu birazdan paylaşacağım :D

    Problemi şimdilik Anonymous veri tipinden vazgeçerek çözdüm. View' in beklediği Article şeklinde datayı gönderdim.

Toplam Hit: 1732 Toplam Mesaj: 10
asp.net mvc