首页 > 解决方案 > 基于条件的 Blazor Renderfragment

问题描述

我的代码中有一个表格在表格中多次出现的表格模式,所以我想我可以将它外包到带有 RenderFragments 的模板中,例如:

<table class="table">
<thead>
    <tr>@TableHeader</tr>
</thead>
<tbody>
    @if (TableItems != null)
    {
        @foreach (var tableItem in TableItems)
        {
            <tr>
                @TableRowTemplate(tableItem)
            </tr>

            <tr>
                <td colspan="@Colspan">
                    <table class="table">
                        <thead>
                            @if (SubTableHeader != null)
                            {
                                <tr>@SubTableHeader</tr>
                            }
                        </thead>
                        <tbody>
                            @if (SubTableItems != null && TableRowTemplate != null)
                            {

                                @foreach (var subTableItem in SubTableItems)
                                {
                                    <tr>@SubTableRowTemplate(subTableItem)</tr>

                                }

                            }
                            else
                            {
                                <div class="alert alert-info" role="alert">
                                    @NotFoundMessage
                                </div>
                            }
                        </tbody>
                    </table>
                </td>
            </tr>
        }
    }

</tbody>

但是,只有在 tableItem 的属性为 true 时才会显示第二个表。变量的名称取决于类型,并且必须在 foreach 循环内访问:

        <TableWithSubTableTemplate Items="pets" TItem="Pet">
        <TableHeader>
            <th>Name</th>
            <th>Active</th>
            <th>Options</th>
        </TableHeader>
        <TableRowTemplate>
            <td>@pets.Name</td>
            <td>....</td>
        </TableRowTemplate>
        if(@pets.Active) // This doesn't work, because of the [design][1]
        {
            <SubTableHeader>
             .....
            </SubTableHeader>
            <SubTableRowTemplate>
             .....
            </SubTableRowTemplate>
         }
    </TableWithSubTableTemplate>

也不能添加参数,因为传递参数只能在外部 <TableWithSubTableTemplate> 中。处理这个问题的正确方法是什么?

.[1]:https ://github.com/dotnet/aspnetcore/issues/10836

标签: blazor

解决方案


推荐阅读