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
语法示例。。。我发现很难相信其他答案,所以不要处理包含列表的列表-没有那么多其他选项。你能把这些链接贴到你看过的链接上吗?你错了,我在你写答案的同时写了我的答案。