2017-02-15 76 views
0

我是新來的asp.net mvc,viewmodels對我來說也是新手。我有一個顯示產品的視圖。在視圖中,我想以一格顯示所有產品。 然後在另一個div中,我只想顯示featuredProducts,並在另一個div中顯示Toprated。我正嘗試爲每個視圖模型使用不同的視圖模型,因爲我將在不同的頁面上再次使用這些視圖模型。這是做這件事的正確方法,如果不是這樣的話。另外我怎樣才能用viewmodels來做這個練習。View中的多個ViewModels asp.net MVC

域模型

public class Product 
{ 
    public int ProductId { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public Boolean FeaturedProduct { get; set; } 
    public Boolean NewProduct { get; set; } 
    public Boolean TopRated { get; set; } 
    public Boolean BestSellers { get; set; } 
} 

ViewModelProductsMain(父)

public class ViewModelProductsMain 
{ 
    public ViewModelProducts Products{ get; set; } 
    public ViewModelTopRated TopRated{ get; set; } 
    public ViewModelFeatured Featured{ get; set; } 
} 

的ViewModels(兒童)

public class ViewModelProducts (Child) 
//all products 
{ 
    public int ProductId { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 
public class ViewModelTopRated (Child) 
//all products with TopRated true 
{ 
    public int ProductId { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

public class ViewModelFeatured (Child) 
//all products with Featured true 
{ 
    public int ProductId { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

控制器

public ActionResult Index() 
{ 
    //How do I, instantiate and populate the model 
    var model = new ViewModelProductsMain(); 
    return View(model); 
} 

查看

@model IEnumerable<myProject.ViewModels.ViewModelProductsMain > 
+1

沒有兄弟所有模型中包含相同的屬性 –

+2

的單一模式可以使名爲'ProductsViewModel'這項工作 –

+0

一個視圖模型,然後你的'ViewModelProductsMain'但我懷疑你真的想'公開IEnumerable Products {get;組; }'因爲它的一個集合(也許精選也是如此?) –

回答

0

首先,你應該改變ViewModelProductsMain這樣:

public class ViewModelProductsMain 
    { 
     public List<ViewModelProducts> Products { get; set; } 

     public List<ViewModelTopRated> TopRated { get; set; } 

     public List<ViewModelFeatured> Featured { get; set; } 
    } 

並顯示在你看來你的產品應該寫這樣的代碼:

@model WebApplication1.Models.ViewModelProductsMain 

@{ 
    ViewBag.Title = "Index"; 
} 

<div id="AllProducts"> 
    @foreach (var item in Model.Products.ToList()) 
    { 
     @item.Name 
     <hr/> 
    } 
</div> 

<div id="TopRated"> 
    @foreach (var item in Model.TopRated.ToList()) 
    { 
     @item.Name 
     <hr /> 
    } 
</div> 

    <div id="Featured"> 
     @foreach (var item in Model.TopRated.ToList()) 
     { 
      @item.Name 
      <hr /> 
     } 
    </div> 
0

我看到公衆int ProductId {get;組; }在所有的模型中。看起來你的數據有些像你的數據中的外鍵,所以你可以使你的視圖模型比我們在ViewModelProductsMain中看到的更好。

這樣:

public class Product 
{ 
    public int ProductId { get; set; } 
    public string SKU { get; set; } 
    public string Name { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
} 

public class ViewModelProducts { 
    public virtual List<Product> Products { get; set; } 
} 

你在上面看到ViewModelFeaturedViewModelTopRated

那麼什麼:

public class ViewModelProductsMain 
{ 

    public ViewModelProductsMain() 
    { 
     this.Products = new List<ViewModelProducts>(); 
     this.TopRated = new List<ViewModelTopRated>(); 
     this.Featured = new List<ViewModelFeatured>(); 
    } 
    public List<ViewModelProducts> Products { get; set; } 

    public List<ViewModelTopRated> TopRated { get; set; } 

    public List<ViewModelFeatured> Featured { get; set; } 

}

不要忘了寫一個構造函數給你[R ViewModelProductsMain 如果你不做出構造..它帶來null reference error

+0

我認爲這是有道理的。每個視圖模型仍然是它自己的類 - 正確的?以及如何編寫構造函數,這是我仍然有問題 – dnice

+0

@dince在這種情況下,每個視圖模型是特定類的列表...只是一個簡單的搜索關於構造函數將幫助你,谷歌.. –