Razor 如何确定RenderFragment是否包含内容
我刚刚构建了一个非常简单的razor组件,用于模板化页眉。现在我注意到我关于ChildComponent的情况!=null总是真的。有没有办法检查ChildContent是否定义了任何真实的内容 在我的示例中,PageTitleSecondaryRow将始终呈现到我的页面中,即使ChildContent为空(但它不是NULL)。我有哪些选择。作为一种解决方法,我现在将创建一个自定义RenderFragment属性,该属性在初始化时为null。但我不认为这是最终的解决办法Razor 如何确定RenderFragment是否包含内容,razor,blazor,blazor-server-side,razor-components,Razor,Blazor,Blazor Server Side,Razor Components,我刚刚构建了一个非常简单的razor组件,用于模板化页眉。现在我注意到我关于ChildComponent的情况!=null总是真的。有没有办法检查ChildContent是否定义了任何真实的内容 在我的示例中,PageTitleSecondaryRow将始终呈现到我的页面中,即使ChildContent为空(但它不是NULL)。我有哪些选择。作为一种解决方法,我现在将创建一个自定义RenderFragment属性,该属性在初始化时为null。但我不认为这是最终的解决办法 <div clas
<div class="wrapper border-bottom white-bg page-heading">
<div class="row" id="PageTitlePrimaryRow">
<div id="PageTitleIconColumn">
@(IconMarkup())
</div>
<div id="PageTitleTextColumn">
<h2>
@Title
</h2>
@if (Elements != null && Elements.Count > 0)
{
<TitleBreadcrumbs Elements="@Elements" />
}
</div>
<div id="PageTitlePostColumn">
</div>
</div>
@if (ChildContent != null )
{
<hr />
<div id="PageTitleSecondaryRow">
@ChildContent
</div>
}
</div>
@(IconMarkup())
@头衔
@if(Elements!=null&&Elements.Count>0)
{
}
@if(ChildContent!=null)
{
@儿童内容
}
正如彼得·莫里斯(Peter Morris)所说,ChildContent只有在使用自动关闭语法时才为空。这是因为这是任何内容被分配到的默认呈现片段,即使它是空内容
建议为您的渲染片段使用不同的名称。这样,如果它为null,您就知道它没有被显式设置。另一个好处是更准确地传达渲染片段的内容
假设您有以下组件MyComponent.razor
:
@if (ListItems != null)
{
<ul>
<li> default item </li>
@ListItems
</ul>
}
else
{
<p>alternative content</p>
}
@code {
[Parameter]
public RenderFragment ListItems { get; set; }
}
@if(ListItems!=null)
{
- 默认项
@列表项
}
其他的
{
替代内容
}
@代码{
[参数]
公共呈现片段列表项{get;set;}
}
通过使用不同的RenderFragment名称,您必须在使用此组件时明确设置它。这捕获了ChildContent可能导致空html的意外情况:
@* displays only the alternative content *@
<MyComponent></MyComponent>
@* displays the ul element *@
<MyComponent>
<ListItems>
<li> other item </li>
</ListItems>
</MyComponent>
@*仅显示备选内容*@
@*显示ul元素*@
其他项目
基本上是一样的,只是参数的名称不同。这可以防止Blazor在不使用自动关闭语法的情况下,假设打开和关闭之间的任何内容都属于ChildContent。只有在使用自动关闭语法时,名为ChildContent的渲染片段才会为空。谢谢你,彼得·莫里斯。这就解释了为什么有时候空检查的行为与我所希望的一样。有没有办法访问RenderFragment的一些内部信息。我唯一需要知道的是,ChildContent对象中嵌套了任何组件或元素。我的问题是组件中的ChildContent是从父组件传递的。因此,在父级中从来没有自动关闭语法,因为它被视为简单的占位符。您可以改为将名称更改为ChildContent以外的其他名称,然后组件的使用者将需要显式地包含属性的名称,例如,这样可以很容易地检查是否添加了属性(它将不为null)