显示mvc中引用实体的名称

时间:2016-02-12 08:45:51

标签: c# asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-6

我有两个实体,它们是从MVC5中实体框架的数据第一种方法生成的。 以下是模型

public partial class Cuisine
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Dish> Dishes { get; set; }
}


public partial class Dish
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CuisineId { get; set; }

    public virtual Cuisine Cuisine { get; set; }
}

当我显示Dishes时,它显示如下

enter image description here

但是我希望列名称为Name和Cuisine Name而不是Name和Name。 怎么做? 我想在菜单列表中显示菜单列表和菜单名称时显示为名称

我的cshtml代码

<table class="table">
<tr>
<th>
    @Html.DisplayNameFor(model => model.Name)
</th>
<th>
    @Html.DisplayNameFor(model => model.Cuisine.Name)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
    @Html.DisplayFor(modelItem => item.Name)
</td>
<td>
    @Html.DisplayFor(modelItem => item.Cuisine.Name)
</td>
<td>
    @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
    @Html.ActionLink("Details", "Details", new { id=item.Id }) |
    @Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>

3 个答案:

答案 0 :(得分:3)

使用ViewModel可能是一个好主意,ViewModel只聚合视图所需的属性。

public class DishVm
{
        public int Id { get; set; }

        [Display(Name="Cuisine Name")]
        public string Name { get; set; }

        [Display(Name="Name")]
        public string DishName { get; set; }
}

我不知道您是如何检索数据的,但它看起来与此相似:

IEnumerable<DishVm> vm = context.Dishes
                                .Include(c => c.Cuisines)
                                .OrderBy(n => n.Name)
                                .Select(x => new DisVm {
                                    Name = x.Cuisine.Name,
                                    DishName = x.Name
                                 });

return View(vm);

您的视图将有一个新的模型类型:@model IEnumerable<Yournamespace.Folder.DishVm>

答案 1 :(得分:2)

您可以将DataAnnotation用于此

public partial class Cuisine
{
    public int Id { get; set; }

    [Display(Name="Name of Cuisine")]
    public string Name { get; set; }

    public virtual ICollection<Dish> Dishes { get; set; }
}

修改

您已使用@Html.DisplayNameFor(model => model.Cuisine.Name)来显示菜肴的名称。您可以使用LabelFor()代替DisplayNameFor来显示名称。更改cshtml并使用

@Html.LabelFor(model =>  model.Cuisine.Name, "Cuisine Name")

答案 2 :(得分:0)

在虚拟财产的顶部,用[Display(Name =“Cuisine”]

装饰它)

然后在您的视图中 - &gt;标题,最后删除.Name。所以它说: @ Html.DisplayNameFor(model =&gt; model.Cuisine)

就这么简单:)