我是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; }
}
要显示我使用的父视图的信息:
@foreach (Child c in Model.Childs)
{
@c.Name
}
上述作品,但我想为孩子使用不同的视图,所以我尝试了以下内容:
@Html.DisplayFor(model => model.Childs)
并定义了以下视图:
@model WebApplication1.Models.Child
<div>
@Html.DisplayFor(model => model.Name)
</div>
这不起作用,我得到的是显示的System.Data.Entity.DynamicProxies而不是子名称列表。我已经读过这是因为MVC5不知道要使用什么视图。我已尝试将显示中的视图指定为@Html.DisplayFor(model => model.Childs, "ViewName1.cshtml")
,但这根本没有帮助。
除了上述内容之外,我还想对@Html.EditorFor(model => model.Childs)
使用类似的东西。
答案 0 :(得分:5)
你需要告诉Razor每个子对象使用哪个视图。这样的事情(显然用您的子视图的名称替换ChildViewName
):
@foreach (Child c in Model.Childs)
{
@Html.Partial("ChildViewName", c)
}
答案 1 :(得分:5)
首先在DisplayTemplates
视图文件夹中创建Parent
子文件夹。然后在该文件夹中创建一个名为Child.cshtml
的视图。
<强> Child.cshtml 强>
@model WebApplication1.Models.Child
@Model.Name
...more HTML markup if needed
然后您所做的就是致电@Html.DisplayFor(m => m.Childs)
,框架将为您完成剩下的工作。请注意,如果您使用允许指定要使用的视图的重载,则不会自动为您完成循环。
对编辑器模板重复相同的过程,使用EditorTemplates
文件夹并遵循相同的约定(视图名称=类型名称)来命名您的视图。
答案 2 :(得分:1)
添加我的评论作为上述答案的扩展,因为我认为很多asp.net mvc的新手都会错过这个。 @panais提到我的评论帮助了他\她。所以,我认为它也可能对其他人有所帮助。