n 循环次数,其中 n 未知
n number of loops where n is not known
我有以下 Entity Framework
class 和 table 中的 Foreign Key
到 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; }
}
上面的映射效果很好,我只需传递 ItemParentID
并选择 [=,就可以将 Children
属性 中的所有子项目提升到第 n 级17=]。
现在我必须将此数据与我的 razor
视图中的所有子项及其子项等绑定在一起。我从以下代码开始:
@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>
}
以上代码适用于 2 级子项,但我想将所有子项及其子项的数据绑定到第 n 级。我已经检查了关于 SO
的其他问题,但它们很复杂,而且大多数都没有像上面提到的 Children
属性 那样处理 lists
。有什么简单的方法可以完成吗?
您可以像这样递归使用 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>
你可以用递归局部视图很好地解决这个问题。
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>
}
我有以下 Entity Framework
class 和 table 中的 Foreign Key
到 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; }
}
上面的映射效果很好,我只需传递 ItemParentID
并选择 [=,就可以将 Children
属性 中的所有子项目提升到第 n 级17=]。
现在我必须将此数据与我的 razor
视图中的所有子项及其子项等绑定在一起。我从以下代码开始:
@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>
}
以上代码适用于 2 级子项,但我想将所有子项及其子项的数据绑定到第 n 级。我已经检查了关于 SO
的其他问题,但它们很复杂,而且大多数都没有像上面提到的 Children
属性 那样处理 lists
。有什么简单的方法可以完成吗?
您可以像这样递归使用 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>
你可以用递归局部视图很好地解决这个问题。
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>
}