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

回答