Подтвердить что ты не робот

Бритва жалуется, когда я помещаю тег закрытия div в предложение if

Я пытаюсь сделать это с помощью шаблонов Razor:

@if(isNew)
{
   <div class="new">
}

...


@if(isNew)
{
   </div>
}

Ошибка:

cannot resolve the symbol 'div'

Razor не любит конечный тег div внутри предложения IF, как я могу заставить это работать? Есть ли побег, который я должен использовать?

4b9b3361

Ответ 1

Razor не нравится, когда вы разделяете начальные и конечные теги вверх так, чтобы он не мог правильно разобрать HTML-код, поэтому вам нужно избегать их как обычный текст:

@if(isNew)
{
   @:<div class="new">
}

...


@if(isNew)
{
   @:</div>
}    

Более традиционный подход состоял бы в повторении разметки внутри div (с использованием частичных или других) - какой подход более желателен, я бы сказал, зависит от характера разметки между условными разделителями:

@if(isNew)
{
    <div class="new">
        <!-- some markup or partial view -->
    </div>
}
else
{
    <!-- some markup or partial view -->
}

Я бы предпочел этот подход, если:

  • Содержащаяся разметка может быть с пользой содержаться в частичном, чтобы ее можно было повторно использовать в другом месте.
  • Разметка условной упаковки больше, чем несколько строк, в результате чего разметка становится беспорядочной.

Я также должен добавить опцию использования вспомогательных методов:

@helper MainMarkup()
{
    <!-- some markup or partial view -->
}

@if(isNew)
{
    <div class="new">
        @MainMarkup()
    </div>
}
else
{
    @MainMarkup()
}

Это полезно, если вы хотите использовать второй вариант выше, но не повторяйте разметку или вложение слишком большого количества частичных (особенно если эта разметка применима только для этого представления).