C# n未知的循环数
我有以下C# n未知的循环数,c#,asp.net-mvc,entity-framework,nested-loops,razorengine,C#,Asp.net Mvc,Entity Framework,Nested Loops,Razorengine,我有以下实体框架类,其中的一列是同一表中主键的外键: [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
实体框架
类,其中的一列是同一表中主键
的外键
:
[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; }
}
上面的代码适用于两个级别的子项,但我想将所有子项及其子项的数据绑定到第n个级别。我已经检查了关于
的其他问题,所以
但是这些问题很复杂,而且大多数问题都不涉及上面提到的列表
,比如儿童
属性。有什么简单的方法可以做到这一点吗?您可以像这样递归使用Html.RenderPartial
helper(只是没有特定的标记):
查看:
@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>
@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>
@model IEnumerable<Item>
@if (Model?.Any() ?? false)
{
foreach (var item in Model)
{
@Html.Partial("RecursivePartial", item)
}
}
else
{
<h4>No items available.</h4>
}
@模型项
@Model.ItemName
@如果(Model.Children!=null&&Model.Children.Count>0)
{
foreach(Model.Children中的变量child)
{
-
@{Html.RenderPartial(“Index”,child);}
}
}
其他的
{
-
@Model.ItemName没有可用的项目。
}
使用递归partialview可以很好地解决这个问题
RecursivePartial.cshtml:
@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>
@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>
@model IEnumerable<Item>
@if (Model?.Any() ?? false)
{
foreach (var item in Model)
{
@Html.Partial("RecursivePartial", item)
}
}
else
{
<h4>No items available.</h4>
}
@模型项
@Model.ItemName
@if(Model.Children?Any()?false)
{
foreach(Model.Children中的变量child)
{
-
@Html.Partial(“RecursivePartial”,child)
}
}
其他的
{
-
@Model.ItemName没有可用的项目。
}
你可以在任何你需要的地方称之为partialview
Index.cshtml:
@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>
@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>
@model IEnumerable<Item>
@if (Model?.Any() ?? false)
{
foreach (var item in Model)
{
@Html.Partial("RecursivePartial", item)
}
}
else
{
<h4>No items available.</h4>
}
@model IEnumerable
@如果(型号?.Any()?错误)
{
foreach(模型中的var项目)
{
@Html.Partial(“RecursivePartial”,item)
}
}
其他的
{
没有可用的项目。
}
您需要的是一个递归函数。一个选项是创建一个HtmlHelper扩展方法,如Hmmm中所示。。。您可以尝试使用@helper
方法以递归方式呈现此内容。将当前节点作为参数传入,然后迭代并渲染子节点。此处的@helper
语法示例。。。我发现很难相信其他答案,所以不要处理包含列表的列表-没有那么多其他选项。你能把这些链接贴到你看过的链接上吗?你错了,我在你写答案的同时写了我的答案。