razor - 我可以在 Blazor 中编写一个在 View 中动态呈现元素的函数吗?

标签 razor mvvm blazor blazor-server-side

我有一个名为 BusinessUnit 的对象,其中包含一个子业务单位列表,我需要一个函数来为其父级下的每个子级呈现

  • 元素。我到目前为止的代码如下:
    <ul id="Level0">
        @foreach (var bizUnit in businessUnitViewModel.BusinessUnitInfos)
        {
            <li>
                <span>@bizUnit.BusinessUnitName</span>
                    <ul class="nested">
                        @foreach (var childOfbizUnit in bizUnit.Children)
                        {
                            <li>@childOfbizUnit.BusinessUnitName</li>
                        }
                    </ul>
            </li>
        }
    </ul>
    

    嵌套的 foreach 与第一个基本相同,但对它们进行硬编码限制了我可以拥有的层次级别。我需要这样的功能:
     public void HasKids(BusinessUnitInfo bizUnit)
        {
            foreach (var bizUnitChild in bizUnit.Children)
            {
                //Render an <li> tag element with bizUnitChild's 
                name<li>bizUnitChild.Name</li>
    
                HasKids(bizUnitChild);
            }
        }
    

    有谁知道我可以为最后一个代码块中的注释做什么?我可以使用 C# 代码动态呈现列表标记吗?比:)

  • 最佳答案

    如果结构是一棵树,那么您实际上需要一个递归组件。

    备注 : 出于性能原因,您应该始终使用 @key从循环生成 UI 标记时的指令。您可以在 Blazor University 阅读更多信息.

    <li>
      @Item.Name
      if (@Item.Children.Any())
      {
        <ul id="@level">
          @foreach(var child in Item.Children)
          {
            <ShowItem Item=@child Level="@(Level + 1)" @key=child/>
          }
        </ul>
      }
    </li>
    
    @code {
      [Parameter] MyElementClass Item { get; set; }
      [Parameter] int Level { get; set; }
    }
    

    在您的主页中,您只需执行此操作
    <ul level="0">
      @foreach(var item in TopLevelItems)
      {
        <ShowItem Item=@item Level=1 @key=item/>
      }
    </ul>
    

    关于razor - 我可以在 Blazor 中编写一个在 View 中动态呈现元素的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57091756/

    相关文章:

    html - 使我隐藏的单选按钮可制表/508 兼容

    c# - 如何在我的 MVC 应用程序的 web.config 中允许 unicode 字符?

    data-binding - Windows Store 应用程序上的条件样式(或 Style.Triggers->DataTrigger 等效项)的最佳实践?

    html - 如何在 Blazor 的字段中渲染 html

    javascript - 是否可以找到具有特定开头的 html 属性? (没有具体数值)

    ios - 使用 MVVM 时,如何在子 ViewController 中扩展 ViewModel?

    c# - 在构建时数据类型未知时将数据对象映射到合适的 ViewModel

    c# - 如何从 Blazor @code block 中的单选/复选框表单提交中获取数据?

    c# - Blazor InputText、HTML Input 和直接从 C# 代码分配之间的差异

    asp.net-mvc-3 - 如何在 ASP.NET MVC 3 Preview 1 的 Razor 中指定默认布局页面?