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>
}