如何在 MVC 中显示来自两个单独表的数据?

How to display data from two separate tables in MVC?

所以,我是编程新手,我正在尝试制作我的第一个 .net 项目,但我被卡住了。

我有一个包含 table 产品的数据库,它看起来像这样:

    [Key]
    public int ProductId { get; set; }

    public string ProductName { get; set; }

    [Range(1, int.MaxValue)]
    public double ProductPrice { get; set; }

    public string ProductDescription { get; set; }

    public string ProductImagePath { get; set; }
   
    public int ProductColorId { get; set; }
    [ForeignKey("ProductColorId")]
    public virtual ProductColor ProductColor { get; set; }

   
    public int ProductShippingOptionId { get; set; }
    [ForeignKey("ProductShippingOptionId")]
    public virtual ProductShippingOption ProductShippingOption { get; set; }

    
    
    public int ProductConditionId { get; set; }
    [ForeignKey("ProductConditionId")]
    public virtual ProductCondition ProductCondition { get; set; }

ProductShippingOption、ProductColor 和 ProductCondition 列是单独的 table,每个列都包含 Id 和 Name 列。

当我将产品添加到数据库时,我只想在视图中显示一个产品的详细信息,但我需要显示 ProductConditionName 而不是 ProductConditionId(例如)。

我应该在我的 ViewModel 和我的控制器中包含什么,以便我可以在我的视图中使用它?

我在 ProductController 中的操作如下所示

public IActionResult ProductTemplate(int? id)
    {
        ProductVM productVM = new ProductVM()
        {
            Product = _db.Product.Find(id),
            
        };

        if (id == 0)
        {
            return NotFound();
        }

        if (id == 0)
        {
            return NotFound();
        }

       

        if(productVM==null)
        {
            return NotFound();
        }

        return View(productVM);

    }

谢谢!

最好和最简单的方法是在 Product:

中包含 类

对于您的 ProductTemplate 操作:

ProductVM productVM = new ProductVM()
{


    Product = _db.Product.Where(s=>s.Id == id)
                         .Include(s=>s.ProductColor)
                         .Include(s=>s.ProductShippingOption)
                         .Include(s=>s.ProductCondition)
                         .FirstOrDefault();
};

您可以在 .cshtml 中使用(假设您想要 ProductColor 名称)调用它们:

@Model.Product.ProductColor.Name

或者您可以将 Include() 添加到您的上下文中以默认包含所有内容。