2013-08-23 46 views
10

我有以下MVC 4剃刀代碼:MVC 4剃刀如果分裂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++; 
} 

我基本上是試圖生成每一個DIV類行的內容有條件地與不同路徑的開始和結束標記if語句。當我使用直接的HTML時,編譯器不喜歡它,並認爲括號關閉。看起來好像Html.Raw是我的在線搜索解決方案,但是當我使用Html.Raw時,div在查看源代碼時不顯示。

有誰知道發生了什麼事?

回答

24

嘗試用@前綴的Html.Raw電話:

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

感謝達林說做到了:) – user2129585

10

剃刀如下HTML和C#/ 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> 
} 

記住@象徵,剃刀解析器,意味着你正在做從一種語言到另一種過渡(雖然HTML代碼,反之亦然)。因此,由於您位於if(...)區塊,而Html.Raw實際上正在輸出HTML,因此您需要使用@

2

您還可以使用:

if(condition){ 
@:<div> 
} 

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