我现在有以下代码来编写一个包含控制器操作链接的项目的平面列表:
<ul>
@foreach (var item in items)
{
<li>
<a asp-controller="Home" asp-action="Demo" asp-route-itemName="@item.Name">
@item.Name
</a>
</li>
}
</ul>
现在这必须是递归的。项目还可以包含子项目。对于递归,我需要某种功能。我知道我可以使用@functions
并在.cshtml文件中定义该函数。不确定是否仍然允许带有标记助手的这种漂亮的内联HTML代码,它似乎并非如此。另一个选项是.cs文件中的HTML帮助程序,这里没有内联HTML。 @helper
似乎不再可用。
我还有哪些其他选项来定义函数并保留Razor提供的内联HTML语法?
答案 0 :(得分:8)
在部分视图中放置用于呈现注释的代码,并通过调用@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>
}
这会递归地呈现每条评论及其所有子元素(如果有的话)。