Как я могу скрыть столбец <table>, если выполняется условие?

У меня есть <table> с несколькими строками и столбцами. Я хочу скрыть последний столбец, если конкретная переменная foo в коде равна -1.
Поэтому я не могу использовать CSS и :last-child, потому что в CSS у меня нет доступа к foo.
Я попытался стилизовать последний столбец <colgroup> с помощью <col style = "@(foo == -1d ? "visibility: collapse" : "")">, но это не свернуло весь столбец, но по-прежнему отображало супер- и нижние индексы <sup> и sub.
Конечно, я мог бы заменить

<tr>
    <td></td>
    <td></td>
    <td></td>
</tr>

с

<tr>
    <td></td>
    <td></td>
    @if (foo != -1)
    {
        <td></td>
    }
</tr>

в каждом ряду, но я надеюсь, что есть более чистый способ.

Было бы лучше учесть, если бы вы динамически составляли строки таблицы из источника данных. Но поскольку, как указано в проблеме, кажется, что таблица статически определена как html в вашем шаблоне, вы вынуждены ставить такое условие в каждом месте, где у вас есть статический фрагмент html, который вы хотели исключить.

Diego D 09.02.2023 14:59

Вы можете сделать это способом CSS, способом бритвы или обоими способами. Как было сказано ранее, вам придется поставить логику на каждое место. Однако вы также можете заменить его компонентом Blazor.

T.Trassoudaine 09.02.2023 15:08
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
2
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать галочку @if (foo...), чтобы дополнительно определить класс CSS. Обязательно используйте имя класса, уникальное для других CSS, которые могут существовать.

@if (foo == -1)
{
  <style type = "text/css">
    .sometimesHidden { display: none; }
  </style>
}
...
<tr>
    <td>A</td>
    <td>B</td>
    <td class = "sometimesHidden">X</td>
</tr>
<tr>
    <td>C</td>
    <td>D</td>
    <td class = "sometimesHidden">Y</td>
</tr>

Обратите внимание, что это всегда будет отображать последний <td> из каждого <tr>. Вам нужно убедиться, что эти ячейки (и особенно их содержимое) не вызывают ошибок при отображении.

Или вы можете использовать встроенный стиль:

@{
  var tdStyle = foo == -1 ? "display: none;" : "";
}
...
<tr>
    <td>A</td>
    <td>B</td>
    <td style = "@(tdStyle)">X</td>
</tr>
<tr>
    <td>C</td>
    <td>D</td>
    <td style = "@(tdStyle)">Y</td>
</tr>

Я определил логическое значение в фоновом режиме и сделал различие между регистрами в <td style>. Прямое определение строки, как вы делаете, еще лучше. Спасибо.

Flippowitsch 09.02.2023 15:41

Для этого можно использовать компоненты Blazor:

MyLastColumn.razor

@if (Foo != -1){
  <td>@ChildContent</td>
}

@code {
    [Parameter]
    public RenderFragment? ChildContent { get; set; }

    [Parameter]
    public int Foo { get; set; }
}

А затем используйте его:

<MyLastColumn Foo = "@foo">content</MyLastColumn>

Это сработало бы, но в этом простом случае это слишком много. Спасибо, в любом случае.

Flippowitsch 09.02.2023 15:38

Другие вопросы по теме