2013-08-23 14 views
10

Mam następujący MVC kod 4 Razor:MVC 4 Razor Jeśli dzielenie div tagi

@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++; 
} 

jestem zasadniczo próbuje wygenerować zawartość każdej klasy div rzędu warunkowo z początkowych i końcowych znaczników w różnych ścieżkach instrukcje if. Kiedy używam prostego kodu HTML, kompilator go nie lubi i uważa, że ​​nawiasy są wyłączone. Wygląda na to, że Html.Raw jest rozwiązaniem z moich wyszukiwań w Internecie, ale kiedy używam Html.Raw, div nie pojawia się, gdy przeglądam źródło.

Czy ktoś wie, co się dzieje?

Odpowiedz

24

Spróbuj poprzedzania wywołania Html.Raw z @:

@for (int i = 1; i <= 100; i++) 
{ 
    if (currentCol == 1) 
    { 
     @Html.Raw("<div class=row>"); 
    } 
    if (currentCol == maxCol) 
    { 
     @Html.Raw("</div>"); 
    } 
    currentCol++; 
} 
+0

Thanks Darin że to zrobił :) – user2129585

10

Razor następujący kod HTML i C#/VB bloków składniowych, dlatego rozbicie tagi to robi. Dwa obejścia:

1: Użyj Html.Raw (jak zrobiłeś)

if (condition){ 
    @Html.Raw(@"<div class=""row"">") 
}else{ 
    @Html.Raw("</div>") 
} 

2: użyć specjalnego <text>...</text> tagi.

if (condition){ 
    <text> 
    <div class="row"> 
    </text> 
}else{ 
    <text> 
    </div> 
    </text> 
} 

Pamiętaj, że @ symbol, do parsera Razor oznacza robisz przejście z jednego języka na drugi (choć HTML do kodu, lub na odwrót). Tak więc, ponieważ znajdujesz się w bloku if(...), a Html.Raw faktycznie wyprowadza HTML, musisz użyć @.

2

Można również użyć:

if(condition){ 
@:<div> 
} 

if(condition){ 
@:</div> 
} 
Powiązane problemy