我是 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/