【问题标题】:check if RenderFragment is empty检查 RenderFragment 是否为空
【发布时间】:2019-09-30 18:33:51
【问题描述】:

有没有办法检查 RenderFragment 是否为空?

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

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

编辑

为了进一步讨论,我添加了一个功能请求here

【问题讨论】:

  • 是否可以让模型实现此检查行为?尽可能保持“愚蠢”的观点是更好的恕我直言
  • RenderFragment 是一个委托,所以你必须运行它......但是你不能重定向输出,afaik。
  • @JohnB 我同时添加了一个 ShowHeader 属性。但这并没有让 MyComp 变得不那么聪明,也让 MyComp 的父级变得复杂......

标签: asp.net-core razor blazor


【解决方案1】:

老问题,但由于它没有得到回答并获得支持......

RenderFragment 是一种代码方法,而不是容器,因此它没有Empty 状态。 它可以是 null - 在它不会产生渲染输出的意义上,这相当于空。

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

bool HeaderTitleIsEmpty => HeaderTitle is null;

【讨论】:

  • String.IsNullOrEmpty(hdr) 然后MyComp 得到一个 HeaderTitle 不是 null
  • 你呢?取决于组件的实现方式——我们看不到
  • 例如如果组件渲染了一个带有 HeaderTitle 的 div,则它不是空的 - 它有 div
  • 这是否适用于通用[Parameter] public RenderFragment&lt;TItem&gt; CustomTemplate { get; set; }?对我来说,它看起来不起作用......
猜你喜欢
  • 1970-01-01
  • 2010-12-23
  • 2013-07-18
  • 2013-07-12
  • 2013-07-27
  • 2015-08-09
  • 2017-06-14
  • 2017-10-07
  • 1970-01-01
相关资源
最近更新 更多