n个循环,其中n未知

9 浏览
0 Comments

n个循环,其中n未知

我有一个使用Entity Framework类,其中一个列是指向同一表中的主键的外键:\n[Table(\"Items\")]\npublic class Item\n{\n [Key]\n public long ItemID { get; set; }\n public string ItemName { get; set; }\n public long? ItemParentID { get; set; }\n [ForeignKey(\"ItemParentID\")]\n public virtual Item Parent { get; set; }\n public virtual ICollection Children { get; set; }\n}\n上面的映射很好用,我可以通过传递ItemParentID并选择Items来获取所有的子项,直到第n层为止。\n现在我需要将这些数据以及它们的子项和子项等绑定到我的razor视图中。我已经开始使用以下代码:\n@if (Model.ChildItems.Count > 0)\n{\n foreach (Item parentItem in Model.ChildItems)\n {\n @parentItem.ItemName\n

    \n @if (parentItem.Children.Count > 0)\n {\n foreach (Item childItem in parentItem.Children)\n {\n

  • \n \n @childItem.ItemName\n \n
  • \n }\n }\n else\n {\n

  • \n 对于@parentItem.ItemName没有可用的项目。\n
  • \n }\n

\n }\n}\nelse\n{\n

没有可用的项目。

\n}\n上面的代码可以处理两层子项,但是我想绑定所有子项及其子项的数据,直到第n层。我查看了其他关于SO的问题,但它们很复杂,大多数问题都没有处理像上面提到的Children属性一样的列表。有简单的方法来完成这个吗?

0
0 Comments

在上述代码中,出现了一个问题:无法确定嵌套循环的次数。这可能导致代码在运行时出现错误或产生意外的结果。为了解决这个问题,我们需要找到一种方法来确定循环应该运行的次数,并相应地调整代码。

解决方法是使用递归。递归是一种在函数内部调用自身的方法。在这种情况下,我们可以创建一个递归的局部视图,以便在每次循环中调用它自己。

我们首先在RecursivePartial.cshtml文件中定义了递归的局部视图。在这个视图中,我们首先显示当前项的名称,然后检查当前项是否有子项。如果有子项,我们使用foreach循环来遍历每个子项,并在每次循环中调用递归的局部视图。如果没有子项,则显示一个消息,表示没有可用的子项。

接下来,在Index.cshtml文件中调用了递归的局部视图。在这个文件中,我们首先检查传入的模型是否有任何项。如果有,我们使用foreach循环来遍历每个项,并在每次循环中调用递归的局部视图。如果没有项可用,则显示一个消息。

通过使用递归的方法,我们可以解决无法确定嵌套循环次数的问题,并能够根据需要调整代码。这种方法可以用于处理任意数量的循环,使代码更加灵活和可扩展。

0
0 Comments

问题的出现原因是在视图中使用了递归调用Html.RenderPartial来渲染嵌套的子视图,但不知道递归调用的次数。

解决方法是在视图中使用一个循环来遍历子视图的集合,并对每个子视图进行递归调用Html.RenderPartial。如果子视图集合为空或不存在,则输出一个提示信息。

下面是根据给定示例代码整理的文章:

在视图中,我们可以使用Html.RenderPartial助手函数进行递归调用,如下所示(这只是一个示例,不包含特定的标记):

Item
<p>.ItemName</p>
<ul>
     (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 .ItemName.
        </li>
    }
</ul>

上述代码中,我们首先检查子视图集合是否存在且不为空。如果是这样,我们使用一个循环遍历子视图集合,并对每个子视图进行递归调用Html.RenderPartial,将子视图的名称和对应的数据传递给它。这样可以实现嵌套渲染。

如果子视图集合为空或不存在,我们输出一个提示信息,告诉用户当前没有可用的子项。

通过这样的递归调用Html.RenderPartial,我们可以动态地渲染嵌套的子视图,而不需要事先知道递归调用的次数。这样可以更方便地处理动态的视图结构。

0