我有以下Entity Framework
类,其中一列是同一张表中Foreign Key
的{{1}}列:
Primary Key
上面的映射很有效,只需传递[Table("Items")]
public class Item
{
[Key]
public long ItemID { get; set; }
public string ItemName { get; set; }
public long? ItemParentID { get; set; }
[ForeignKey("ItemParentID")]
public virtual Item Parent { get; set; }
public virtual ICollection<Item> Children { get; set; }
}
并选择Children
,我就可以将ItemParentID
属性中的所有子项都提升到第n级。
现在,我必须在Items
视图中将此数据与所有子项及其子项等绑定在一起。我已经开始使用以下代码:
razor
以上代码适用于2个级别的子项,但我想将所有子项及其子项的数据绑定到第n级。我已经检查了@if (Model.ChildItems.Count > 0)
{
foreach (Item parentItem in Model.ChildItems)
{
<div class="list-title">
<span>@parentItem.ItemName</span>
<ul>
@if (parentItem.Children.Count > 0)
{
foreach (Item childItem in parentItem.Children)
{
<li>
<a href="@FrontEndDomain.GetWebsiteURL()/@childItem.ItemID/details/@FrontEndDomain.GetURLString(Model.ParentItemName)/@FrontEndDomain.GetURLString(childItem.ItemName)" title="@childItem.ItemName">
@childItem.ItemName
</a>
</li>
}
}
else
{
<li>
No items available for @parentItem.ItemName.
</li>
}
</ul>
</div>
}
}
else
{
<h4>No items available.</h4>
}
上的其他问题,但它们很复杂,而且大多数问题都没有处理上面提到的SO
lists
属性。完成任务的简单方法是什么?
答案 0 :(得分:1)
您可以像这样递归使用Html.RenderPartial
帮助器(它只是example,没有您的特定标记):
查看:强>
@model Item
<p>@Model.ItemName</p>
<ul>
@if (Model.Children != null && Model.Children.Count > 0)
{
foreach (var child in Model.Children)
{
<li>
@{Html.RenderPartial("Index", child);}
</li>
}
}
else
{
<li>
No items available for @Model.ItemName.
</li>
}
</ul>
答案 1 :(得分:0)
使用递归的部分视图可以很好地解决这个问题。
<强> RecursivePartial.cshtml:强>
@model Item
<span>@Model.ItemName</span>
<ul>
@if (Model.Children?.Any() ?? false)
{
foreach (var child in Model.Children)
{
<li>
@Html.Partial("RecursivePartial", child)
</li>
}
}
else
{
<li>
No items available for @Model.ItemName.
</li>
}
</ul>
然后,您可以从任何需要的地方调用此部分视图
<强> Index.cshtml:强>
@model IEnumerable<Item>
@if (Model?.Any() ?? false)
{
foreach (var item in Model)
{
@Html.Partial("RecursivePartial", item)
}
}
else
{
<h4>No items available.</h4>
}