MVC 4 Razor Если разделительные теги div
У меня есть следующий код Razor MVC 4:
@for (int i = 1; i <= 100; i++) {
if (currentCol == 1) {
Html.Raw("<div class=row>");
@*Need to do this because can't have a open div within a if compiler doesnt like it *@
} if (currentCol == maxCol) {
Html.Raw("</div>");
}
currentCol++;
}
Я в основном пытаюсь сгенерировать содержимое каждой строки класса div условно с помощью тегов начала и конца в разных путях операторов if. Когда я просто использую прямой HTML, компилятор ему не нравится и думает, что скобки выключены. Похоже, что Html.Raw
- это решение из моих поисков в Интернете, но когда я использую Html.Raw
, div не появляется, когда я просматриваю источник.
Кто-нибудь знает, что происходит?
Ответы
Ответ 1
Попробуйте префикс вызовов Html.Raw
с помощью @
:
@for (int i = 1; i <= 100; i++)
{
if (currentCol == 1)
{
@Html.Raw("<div class=row>");
}
if (currentCol == maxCol)
{
@Html.Raw("</div>");
}
currentCol++;
}
Ответ 2
Razor следует за блоками синтаксиса HTML и С#/VB, поэтому это происходит при разрыве тегов. Два обхода:
1: используйте Html.Raw
(как вы это сделали)
if (condition){
@Html.Raw(@"<div class=""row"">")
}else{
@Html.Raw("</div>")
}
2: Используйте специальные теги <text>...</text>
.
if (condition){
<text>
<div class="row">
</text>
}else{
<text>
</div>
</text>
}
Помните, что символ @
для парсера Razor означает, что вы делаете переход с одного языка на другой (хотя HTML-код или наоборот). Итак, поскольку вы находитесь в блоке if(...)
и Html.Raw
на самом деле выводит HTML, вам нужно использовать @
.
Ответ 3
Вы также можете использовать:
if(condition){
@:<div>
}
if(condition){
@:</div>
}