首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以用Blazor编写一个函数来动态地呈现视图中的元素吗?

我可以用Blazor编写一个函数来动态地呈现视图中的元素吗?
EN

Stack Overflow用户
提问于 2019-07-18 09:51:44
回答 2查看 3.1K关注 0票数 5

我有一个名为BusinessUnit的对象,它包含一个子业务单元的列表,我需要一个函数来呈现其父级下的每个子元素的< li>元素。到目前为止,我掌握的代码如下:

代码语言:javascript
复制
<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>

嵌套的预测与第一个基本相同,但硬编码限制了我可以拥有多少层次级别。我需要这样的功能:

代码语言:javascript
复制
 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#代码动态地呈现一个列表标记吗?Thans :)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-18 10:16:50

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

备注:出于性能考虑,在从循环生成UI标记时,应该始终使用@key指令。您可以在布拉索大学上阅读更多内容。

代码语言:javascript
复制
<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; }
}

在你的主页上,你只需这样做

代码语言:javascript
复制
<ul level="0">
  @foreach(var item in TopLevelItems)
  {
    <ShowItem Item=@item Level=1 @key=item/>
  }
</ul>
票数 11
EN

Stack Overflow用户

发布于 2020-05-27 12:23:41

我对Peter Morris的代码做了一些改进:

代码语言:javascript
复制
<li>
  @Item.Name
  @if (Item.Children != null && Item.Children.Any())
  {
    <ul class="@Level">
      @foreach(var child in Item.Children)
      {
        <ShowItem Item=@child Level="@(Level + 1)" @key=child/>
      }
    </ul>
  }
</li>

@code {
  [Parameter] public MyElementClass Item { get; set; }
  [Parameter] public int Level { get; set; }
}

我添加了null检查,因为当属性为null时有问题,修正了ul的Id中的一个错误,并将id更改为类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57091756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档