检查RenderFragment是否为空

8

有没有一种方法可以检查 RenderFragment 是否为空?

例如,在下面的代码中,MyComp 显示 Detail 如果 Open 为 true,并且您可以通过单击标题切换 Open。如果没有标题,则我希望 Detail 片段始终处于打开状态。如果有像 HeaderTitle.IsEmpty 这样的属性将会很容易。

    <MyComp Open="false">
        <HeaderTitle>
             @if (!String.IsNullOrEmpty(hdr)) {
                 ...
                <div class="flex-grow"> @hdr </div>
            }
        </HeaderTitle>
        <Detail>
            ...
        </Detail>
   </MyComp>

编辑

为了进一步讨论,我在这里添加了一个功能请求(链接)


1
能否让模型实现这个检查行为呢?在我看来,尽可能保持视图的“愚蠢”更好。 - jazb
1
RenderFragment是一个委托,因此您必须运行它...但据我所知,您无法重定向输出。 - H H
@JohnB 我在此期间添加了一个 ShowHeader 属性。但这并不会使 MyComp 变得不那么智能,而且有点复杂化了 MyComp 的父级... - Ray
2个回答

1

虽然这是一个旧问题,但由于它没有得到答案并且正在获得赞同...

RenderFragment是一种代码方法,而不是容器,因此它没有Empty状态。它可以为null - 在某种意义上等同于空,因为它不会产生任何渲染输出。

在这个问题的背景下,您可以有效地将null视为Empty - 并且只需在您的代码中添加一个方法即可。

bool HeaderTitleIsEmpty => HeaderTitle is null;

String.IsNullOrEmpty(hdr) 时,MyComp 将获得一个 的 HeaderTitle,该标题 不是 null - H H
你认为呢?这取决于组件的实现方式 - 我们无法看到它。 - Mister Magoo
如果组件呈现一个带有HeaderTitle的div,那么它不是空的 - 它有这个div。 - Mister Magoo
1
这个能和通用的 [Parameter] public RenderFragment<TItem> CustomTemplate { get; set; } 一起工作吗?对我来说看起来好像不行... - Major

0
给定的代码中,HeaderTitle 可以为空但永远不会是 null。而且你无法检测空。
  <HeaderTitle>
         @if (!String.IsNullOrEmpty(hdr)) {
             ...
            <div class="flex-grow"> @hdr </div>
        }
    </HeaderTitle>

但是当你这样使用它时
@if (!String.IsNullOrEmpty(hdr)) {
  <HeaderTitle>         
        ...
        <div class="flex-grow"> @hdr </div>
    </HeaderTitle>
}

当 `hdr` 现在为空时, `HeaderTitle` 参数也将为空。这是组件可以轻松检测到的条件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接