在ASP.NETMVC中实现单一视图中的多个模型

y4ekin9u  于 2023-05-23  发布在  .NET
关注(0)|答案(1)|浏览(130)

在我的Web应用程序中,在主视图中,我想显示单独的模型数据。
首先,我创建了一个像这样的视图模型:

public class ProductsViewModel 
{
    public IEnumerable < CakesViewModel > CakesVM { get; set; }
    public IEnumerable < PizzaViewModel > PizzaVM { get; set; }
    public IEnumerable < FastFoodsViewModel > FastFoodsVM { get; set; }
}

public class CakesViewModel 
{
    [Key]
    public int ID {get;set;}
  
    [Required]
    [Display(Name = "Product Name")]
    public string ProductName { get; set; }
   
    [Required]
    public decimal ProductPrice { get; set; }
 
    [Required]
    public string ProductPicture { get; set; }

    [Required]
    [Display(Name = "Category Name")]
    public int Category_ID { get; set; }

    public string Category_Name { get; set; }
 
    [Required]
    public bool Is_Customizable { get; set; }

    public virtual ICollection < CustomizableFoods > CustomizableFoods { get; set; }
}

public class PizzaViewModel 
{
    [Key]
    public int ID { get; set; }

    [Required]
    [Display(Name = "Product Name")]
    public string ProductName { get; set; }

    [Required]
    public decimal ProductPrice { get; set; }

    [Required]
    public string ProductPicture { get; set; }

    [Required]
    [Display(Name = "Category Name")]
    public int Category_ID { get; set; }

    public string Category_Name { get; set; }

    [Required]
    public bool Is_Customizable { get; set; }

    public virtual ICollection < CustomizableFoods > CustomizableFoods { get; set; }
}

public class FastFoodsViewModel
{
    [Key]
    public int ID { get; set; }

    [Required]
    [Display(Name = "Product Name")]
    public string ProductName { get; set; }

    [Required]
    public decimal ProductPrice { get; set; }
 
    [Required]
    public string ProductPicture { get; set; }
 
    [Required]
    [Display(Name = "Category Name")]
    public int Category_ID { get; set; }

    public string Category_Name { get; set; }

    [Required]
    public bool Is_Customizable { get; set; }

    public virtual ICollection < CustomizableFoods > CustomizableFoods { get; set; }
}

在控制器中,我尝试将单独的产品列表加载到单独的列表中,并从该列表加载到视图模型,然后将主视图模型传递给视图。
下面是我的控制器代码:

List<Products> Cakes = db.Products.Where(x => x.Category_ID == 1).ToList<Products>();
List<Products> Pizzas = db.Products.Where(x => x.Category_ID == 2).ToList<Products>();
List<Products> FastFoods = db.Products.Where(x => x.Category_ID == 3).ToList<Products>();

ProductsViewModel allProducts = new ProductsViewModel();

foreach (Products item in Cakes)
{
       CakesViewModel productsView = new CakesViewModel();
       productsView.ID = item.ID;
       productsView.ProductPrice = item.ProductPrice;
       productsView.ProductName = item.ProductName;
       productsView.Is_Customizable = item.Is_Customizable;
       productsView.Category_Name = item.FoodCategories.CategoryName;
       productsView.ProductPicture = item.ProductPicture;
       allProducts.CakesVM(productsView); // here is an error
}

allProducts.CakesVM(productsView);中,我没有看到CakesVM.Add()选项。我需要知道一个解决方案。

qxsslcnc

qxsslcnc1#

您的第一个问题是如何为属性赋值。你不能像使用方法那样使用语法。您只需为属性赋值。
接下来,您的主要问题是需要一个CakesViewModel列表才能为该属性赋值。没有什么是Linq中的一行代码做不到的。

var cakesVMList = Cakes.Select(item => new CakesViewModel
                  {
                      ID = item.ID;
                      ProductPrice = item.ProductPrice;
                      ProductName = item.ProductName;
                      Is_Customizable = item.Is_Customizable;
                      Category_Name = item.FoodCategories.CategoryName;
                      ProductPicture = item.ProductPicture;
                  };
allProducts.CakesVM = cakesVMList;

当然,您需要对其他属性重复此模式。

相关问题