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; }
}
}
所以我认为我的两张表之间的关系是好的。
接下来,我创建了一个控制器,并使用默认视图来存储一些数据。 它看起来像这样:
这是我的默认视图显示信息..
@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号码?
在此先感谢..
佩德罗嗨,你还可以随时问葡萄牙语堆栈溢出。无论如何,我建议你阅读关于视图模型。不用'Produto'和'Categoria'作为你的视图的模型,最好创建一个视图模型(例如'ProdutoViewModel'),它可以容纳你需要的所有属性(包括'NomeCategoria')。你需要使用预测,这似乎是一种常见的做法。此外,这允许您用一些*数据注释验证*来修饰您的视图模型,从而使您可以避免与数据库实体混合。我希望我能以某种方式帮助。 – Alisson
因此,ViewModel本质上就像一个视图..在数据库环境中? 我仍然需要保留Produto和Categoria,因为我将它用于CodeFirst,它是通过Entity Framework创建数据库的模型,所以我想我不能摆脱它,对吧? 干杯。 谢谢..我是新来的,(需要找到一种方法来upvote你XD) –
是的,你可以将一个ViewModel视为一个数据库中的视图,加入相关的表。在使用EF时对投影进行一些研究,以及如何使用ViewModels。 – Alisson