2013-08-23 16 views
10

Ho il seguente MVC codice di 4 Razor:MVC 4 Razor Se i tag scissione div

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

sto fondamentalmente cercando di generare i contenuti di ogni riga div class condizionale con l'inizio e di fine tag in diversi percorsi di le dichiarazioni if. Quando uso solo HTML diretto, al compilatore non piace e pensa che le parentesi siano disattivate. Sembra che Html.Raw sia la soluzione dalle mie ricerche online, ma quando uso Html.Raw, il div non viene visualizzato quando visualizzo la fonte.

Qualcuno sa cosa sta succedendo?

risposta

24

Prova anteponendo i Html.Raw chiamate con @:

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

Grazie Darin che ha fatto :) – user2129585

10

Razor segue HTML e C#/VB blocchi di sintassi, che è il motivo per rompere tag fa questo. Due modi di aggirare:

1: Usa Html.Raw (come hai fatto)

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

2: utilizzare l'apposito <text>...</text> tag.

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

Ricordate che il simbolo @, al parser Razor, significa che stai facendo un passaggio da una lingua all'altra (anche se HTML in codice, o viceversa). Quindi, dal momento che sei in un blocco if(...) e Html.Raw in realtà sta emettendo HTML, devi usare lo @.

2

È anche possibile utilizzare:

if(condition){ 
@:<div> 
} 

if(condition){ 
@:</div> 
} 
Problemi correlati