Razor `if` не регистрирует закрытие`} `, если есть открытый тег <table>`?

Этот код в представлении Razor:

if (true)
{
    <table>
        <tbody>
}

...

if (true)
{
        </tbody>
    </table>
}

не запускается. Он утверждает, что закрытие } в первом выражении if() отсутствует, и я предполагаю это из-за тега <table>.

Есть ли способ обойти это, чтобы условно вставить теги <table>?

Ответ 1

Попробуйте добавить теги с @::

if (true)
{
    @:<table>
        @:<tbody>
}

...

if (true)
{
        @:</tbody>
    @:</table>
}

Ответ 2

Вы можете вставить его как строки, затем они не обрабатываются как html и не мешают синтаксису:

@Html.Raw(true?"<table><tbody>":"")

@Html.Raw(true?"</tbody></table>":"")

Ответ 3

Razor ожидает, что соответствующие теги закрытия будут находиться внутри инструкции по умолчанию.

Вы можете использовать специальный тег <text>, чтобы помочь отключить Razor:

@if (true) {
    <text>
    <table>
        <tbody>
    </text>
}