ASP.NET Core Razor视图中的递归

ygo*_*goe 7 asp.net razor asp.net-core-mvc

我现在有以下代码来编写一个包含控制器操作链接的项目的平面列表:

<ul>
    @foreach (var item in items)
    {
        <li>
            <a asp-controller="Home" asp-action="Demo" asp-route-itemName="@item.Name">
                @item.Name
            </a>
        </li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

现在这必须变为递归.项目还可以包含子项目.对于递归,我需要某种功能.我知道我可以@functions在.cshtml文件中使用和定义该函数.不确定是否仍然允许带有标记助手的这种漂亮的内联HTML代码,它似乎不是这样.另一个选项是.cs文件中的HTML帮助程序,这里没有内联HTML.@helper似乎不再可用了.

我还有哪些其他选项来定义函数并保留Razor提供的内联HTML语法?

Eil*_*lon 12

将用于呈现注释的代码放在局部视图中,并通过调用来呈现它@Html.Partial("comment", comment).

然后在那个评论局部视图中你会有类似的东西

@model Comment

Title: @Model.Title
Message: @Model.Message

@if (Model.ChildComments.Any())
{
    <ul>
        @foreach (var childComment in Model.ChildComments)
        {
            <li>
                @Html.Partial("comment", childComment)
            </li>
        }
    </ul>
}
Run Code Online (Sandbox Code Playgroud)

这将递归地呈现每个注释及其所有子项(如果有).