0

由于英语不是我的母语,因此我非常抱歉我在下一个会议中会出现任何错误。具有关系表属性的下拉列表[MVC .NET]

我创建的产品(produtos)和类型的产品(Categoria)

我的目标是要创造很多的关系(codefirst)在MVC从一个数据库。 如果一个类型的产品(Categoria)可以有多个产品(Produtos)

所以我创造了这个:

namespace HardwareWarehouse.Models 
{ 
    public class Produto 
    { 
     public Produto() 
     { 

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

     [Required] 
     [StringLength(50)] 
     public string Nome { get; set; } 

     [Required] 
     public double Preco { get; set; } 

     [Required] 
     public double Peso { get; set; } 

     [Required] 
     [StringLength(255)] 
     public string Descricao { get; set; } 

     public int Imagem { get; set; } 

     public DateTime UltimaAtualizacao { get; set; } 

     public int Stock { get; set; } 

     public int CategoriaID { get; set; } 

     public virtual Produto Produtos { get; set; } 
    } 
} 

而对于类别/类型产品(Categoria),我创造了这个..

namespace HardwareWarehouse.Models 
{ 
    public class Categoria 
    { 
     public Categoria() 
     { 
      Produtos = new List<Produto>(); 
     } 
     [Key] 
     public int CategoriaID { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string Nome { get; set; } 

     public virtual ICollection<Produto> Produtos { get; set; } 
    } 
} 

所以我认为我的两张表之间的关系是好的。

接下来,我创建了一个控制器,并使用默认视图来存储一些数据。 它看起来像这样:

enter image description here

这是我的默认视图显示信息..

@model IEnumerable<HardwareWarehouse.Models.Produto> 

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
</head> 
<body> 
    <p> 
     @Html.ActionLink("Create New", "Create") 
    </p> 
    <table class="table"> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.Nome) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Preco) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Peso) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Descricao) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Imagem) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.UltimaAtualizacao) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Stock) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.CategoriaID) 
      </th> 
      <th></th> 
     </tr> 

    @foreach (var item in Model) { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Nome) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Preco) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Peso) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Descricao) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Imagem) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.UltimaAtualizacao) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Stock) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.CategoriaID) 
      </td> 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id=item.IDProduto }) | 
       @Html.ActionLink("Details", "Details", new { id=item.IDProduto }) | 
       @Html.ActionLink("Delete", "Delete", new { id=item.IDProduto }) 
      </td> 
     </tr> 
    } 

    </table> 
</body> 
</html> 

数百万美元的问题是什么? 如何使视图显示Categoria.Nome而不是该视图上的CategoriaID号码?

在此先感谢..

+1

佩德罗嗨,你还可以随时问葡萄牙语堆栈溢出。无论如何,我建议你阅读关于视图模型。不用'Produto'和'Categoria'作为你的视图的模型,最好创建一个视图模型(例如'ProdutoViewModel'),它可以容纳你需要的所有属性(包括'NomeCategoria')。你需要使用预测,这似乎是一种常见的做法。此外,这允许您用一些*数据注释验证*来修饰您的视图模型,从而使您可以避免与数据库实体混合。我希望我能以某种方式帮助。 – Alisson

+0

因此,ViewModel本质上就像一个视图..在数据库环境中? 我仍然需要保留Produto和Categoria,因为我将它用于CodeFirst,它是通过Entity Framework创建数据库的模型,所以我想我不能摆脱它,对吧? 干杯。 谢谢..我是新来的,(需要找到一种方法来upvote你XD) –

+1

是的,你可以将一个ViewModel视为一个数据库中的视图,加入相关的表。在使用EF时对投影进行一些研究,以及如何使用ViewModels。 – Alisson

回答