Şimdi Ara

Mvc de veri getirmek

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
1.124
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Ben 4 katmanlı test amaçlı bir proje oluşturdum ,
    1- entity framework class ( adventureworks kullandım)
    2- business class ( adventure works ' de örnek amaçlı product listesi getirmek için kullandım)
    3- surrogate class ( bunu şu amaçla kullandım , product ' da 30 ' a yakın property var ben hepsini kullanmak istemediğimden dolayı sadece 2 alan kullanmak için bu classı yaptım içinede bir productsurrogate class koydum )
    4-hepsini kullananda wcf mimari üzerinden mvc projesine veri aktaran bir servis yaptım) ( Wcf ayarlamasınıda yaptım geriye List döndürecek şekilde)
    şimdi ben wcf üzerinden getproductlist döndüyorm List<productsurrogate> getList - buda tabiki business'daki method.
    ve dönen servisdeki veriyi productconttroller' da çekip view' a veriyorum.( return View(_result.ToList()); )
    Asıl sorun şurda View'dan geriye döndürdüğüm değeri List< productsurrogate> değerini view' da kullanmaya çalıştığımda
    The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[MVC_TestProject.ProductService.ProductSurrogate]', but this dictionary requires a model item of type 'System.Collections.Generic.List`1[Surrogate.ProductSurrogate]
    Hatası alıyorum
    Bunun sebebinide biliyorum aslında Geriye dönen tipi List olarak görmüyor , bir int yada string değer olarak görüyor , benim bildiğim kadarıylada çözümüde MVC tarafında kullanabileceğim bir model yapıp onu kullanmak ama zaten benim bir modelim var artı bir model neden kullanıyorumki ?
    -------------------------------
    Surrogate DLL
    public class ProductSurrogate
    {
    public int ProductId { get; set; }
    public string Name { get; set; }
    }
    --------------------------------
    Business DLL
    public class ProductionOperation
    {
    public List<ProductSurrogate> Get_ProductList()
    {
    List<ProductSurrogate> _productSurrogate = new List<ProductSurrogate>();
    using (AdventureWorksEntities context = new AdventureWorksEntities())
    {
    _productSurrogate = (from p in context.Products
    select new ProductSurrogate { Name = p.Name, ProductId = p.ProductID }).ToList();
    }
    return _productSurrogate;
    }
    }
    -------------------------------------------
    WCF Service
    public class ProductService : IProductService
    {
    static ProductionOperation operations = new ProductionOperation();
    public List<Surrogate.ProductSurrogate> Get_ProductList()
    {
    return operations.Get_ProductList();
    }
    }
    -------------------------------------------
    mvc ' deki controller
    [HttpGet]
    public ActionResult Index()
    {
    ProductService.ProductServiceClient client = new ProductService.ProductServiceClient(); List<ProductService.ProductSurrogate> _result = client.Get_ProductList();
    return View(_result.ToList());
    }
    --------------------------------------------------
    View tarafı
    @model List<Surrogate.ProductSurrogate>
    @{
    ViewBag.Title = "Index";
    }
    <h2>Index</h2>
    <table>
    <tr>
    <th></th>
    <th>
    Name
    </th>
    </tr>
    @foreach (var item in Model)
    {
    <tr>
    <td>
    @item.Name
    </td>
    </tr>
    }
    </table>
    -------------------------------------------------







  • Sorun çözüldü arkadaşlar;

    Sorun tip uyuşmazlığı, elinizde olan bir modeli view için başka modele cevirip atmanıza gerek yok.

    Controller içerisindeki modelinizin tipi List<ProductService.ProductSurrogate>
    Fakat view içerisindeki modelinizin tipi List<Surrogate.ProductSurrogate>
    ikisinden birini değiştimeniz gerekiyor -ki bu view içerisinde olan.

    View sayfaları için özel oluşturulan modellere ViewModel denir. ViewModeller ise zorunlu değildir. Client-side-validation işlemlerini kolaylaştımak ve temiz kod yazmak için yararlıdır.
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.