Фрагмент рендеринга Блейзора на основе условия

blazor

#блейзор

Вопрос:

У меня есть шаблон таблицы с таблицей внутри таблицы несколько раз в моем коде, поэтому я подумал, что могу передать его на аутсорсинг в шаблон с 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 amp;amp; 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

Комментарии:

1. Почему вы не можете нажать проверку состояния на домашних животных. Активен внутри дочернего компонента?

2. Ваш вопрос должен содержать более подробную информацию. Просто недостаточно информации, чтобы дать вам ответ, не делая некоторых диких догадок. Например SubTableRowTemplate(subTableItem) , похоже на переданный метод subTableItem , который я также не вижу в приведенном коде. Я предполагаю, что это на самом деле a RenderFragment , но, не видя его объявленным, я не знаю.