pan*_*ais 4 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; }
}
Run Code Online (Sandbox Code Playgroud)
要在我使用的父视图上显示信息:
@foreach (Child c in Model.Childs)
{
@c.Name
}
Run Code Online (Sandbox Code Playgroud)
上面的工作,但我想为孩子们使用不同的视图,所以我尝试了以下内容:
@Html.DisplayFor(model => model.Childs)
Run Code Online (Sandbox Code Playgroud)
并定义了以下视图:
@model WebApplication1.Models.Child
<div>
@Html.DisplayFor(model => model.Name)
</div>
Run Code Online (Sandbox Code Playgroud)
这不起作用,我得到的是显示System.Data.Entity.DynamicProxies而不是子名称列表.我已经读过这是因为MVC5不知道要使用什么视图.我已经尝试在显示中指定视图, @Html.DisplayFor(model => model.Childs, "ViewName1.cshtml")但这根本没有帮助.
除了上面我想用类似的东西@Html.EditorFor(model => model.Childs).
您需要告诉Razor每个子对象使用哪个视图.像这样的东西(显然用ChildViewName你的子视图的名称替换):
@foreach (Child c in Model.Childs)
{
@Html.Partial("ChildViewName", c)
}
Run Code Online (Sandbox Code Playgroud)
首先DisplayTemplates在Parent视图文件夹中创建子文件夹.然后在该文件夹中创建一个名为的视图Child.cshtml.
Child.cshtml
@model WebApplication1.Models.Child
@Model.Name
...more HTML markup if needed
Run Code Online (Sandbox Code Playgroud)
然后你所做的只是调用@Html.DisplayFor(m => m.Childs),框架将为你完成剩下的工作.请注意,如果使用允许指定要使用的视图的重载,则不会自动为您完成循环.
对编辑器模板重复相同的过程,使用EditorTemplates文件夹并遵循相同的约定(视图名称=类型名称)来命名视图.
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |