c# - MVC 嵌套模型集合

标签 c# asp.net-mvc entity-framework

我是 MVC 的新手,我想在页面上显示来自嵌套模型集合的信息。

所以我的模型如下:

public partial class Parent
{
    public Parent()
    {
        this.Childs = new HashSet<Child>();
     }

    public int ParentID { get; set; } 
     public string Name { get; set; } 

    public virtual ICollection<Child> Childs { get; set; }
 }

在我使用的父 View 上显示信息:

@foreach (Child c in Model.Childs)
{
    @c.Name 
}

上面的方法有效,但我想为 children 使用不同的 View ,所以我尝试了以下方法:

@Html.DisplayFor(model => model.Childs)

并定义了以下 View :

@model WebApplication1.Models.Child

<div>
      @Html.DisplayFor(model => model.Name)
</div>

这不起作用,我得到的是显示的 System.Data.Entity.DynamicProxies 而不是子名称列表。我读到这是因为 MVC5 不知道要使用什么 View 。我已尝试将显示中的 View 指定为 @Html.DisplayFor(model => model.Childs, "ViewName1.cshtml") 但这根本没有帮助。

除了上述之外,我还想为 @Html.EditorFor(model => model.Childs) 使用类似的东西。

最佳答案

首先在您的 Parent View 文件夹中创建一个 DisplayTemplates 子文件夹。然后在该文件夹中创建一个名为 Child.cshtml 的 View 。

Child.cshtml

@model WebApplication1.Models.Child

@Model.Name
...more HTML markup if needed

然后您只需调用 @Html.DisplayFor(m => m.Childs),框架将为您完成剩下的工作。请注意,如果您使用允许您指定要使用哪个 View 的重载,则不会自动为您完成循环。

对编辑器模板重复相同的过程,使用 EditorTemplates 文件夹并遵循相同的约定( View 名称 = 类型名称)来命名您的 View 。

关于c# - MVC 嵌套模型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614358/

相关文章:

c# - 使用 Entity Framework 和 LINQ 的未知列错误

c# - 允许多对多重复吗?

entity-framework - Entity Framework Core - 有转换 - 支持空值

c# - ApiController int 或 string URI 参数的相同路由

c# - 插件架构中的反射与属性

javascript - ASP.NET MVC - 返回 JavascriptResult 和 Json 参数

jquery - ASP MVC jquery 函数无法在部分 View 中工作,但在主视图中工作

c# - 如何在 WPF DataGrid 的列标题中设置垂直文本?

c# - 设置复选框的高度不起作用

c# - 在 404/500/任何异常上显示 MVC5 中的自定义错误 CSHTML 页面?