Blazor:有条件地显示RenderFragment组件



我设计了一个简单的blazor组件,它是一个卡片的包装器。用法如下:

<Card Title="Some title">
<CardBody>My body content</CardBody>
<CardFooter><a href="...">Go</a></CardFooter>
</Card>

它的使用非常简单。但是,在某些情况下,我不希望使用CardFooter组件。但我不能有条件地选择渲染CardFooter。If语句不能像这样在外部:

@if(myCondition){<CardFooter><a href="...">Go</a></CardFooter>};

里面一定是这样的:

<CardFooter>@if(myCondition){...display something};</CardFooter>

问题是,无论如何,我都必须渲染一个空的CardFooter。我希望我可以使用IF语句来决定根本不呈现页脚。有可能吗?

谢谢!

两个选项。我确实认为,在使用3个组件时,条件必须在组件内部的要求听起来有点。。。。奇数/强制。。。几乎就像一次测试。但如果被迫走那条路,请将条件作为CardFooter:的参数

所以卡片标记是这样的:

<Card>
<CardBody>
Something in the body
</CardBody>
<CardFooter Visisble="someCondition">
Something in the body
</CardFooter>
</Card>

页脚组件如下:

@if (Visible)
{
<div class="card-footer">
@ChildContent
</div>
}
@code
{
[Parameter]
public RenderFragment? ChildContent { get; set; }   
[Parameter]
public bool Visisble {get;set;} = true;
}

就我个人而言,对于像卡片这样简单的东西,我可能会创建一个单独的组件(卡片(,并使用两个模板(正文和页脚(。

然后标记看起来有点像:

<Card ShowFooter="true == false">
<Body>Blah blah blah</Body>
<Footer>
<span>Footer</span>
</Footer>
</Card>
@code
{
[Parameter]
public RenderFragment Body { get; set; }

[Parameter]
public RenderFragment Footer { get; set; }    
[Parameter]
public bool ShowFooter {get;set;} = true;
}

走这条路可以让你确保你的CSS一起工作。

如果<CardBody>并且<CardFooter>是<卡片>然后在<卡片>组成部分

[Parameter] public bool ShowFooter { get; set; }

然后,从主机使用:

<Card ShowFooter=@myCondition>

然后在你的<卡片>组件,使用:

@if (ShowFooter)
{
<CardFooter>Content</CardFooter>
}

最新更新