2013-07-01 61 views
11

此代碼,在Razor視圖:如果有打開的`<table>`標籤,Razor`if`不會註冊關閉`}`?

if (true) 
{ 
    <table> 
     <tbody> 
} 

... 

if (true) 
{ 
     </tbody> 
    </table> 
} 

不運行。它聲稱第一個if()聲明中沒有關閉},我猜這是因爲<table>標記。

有沒有辦法可以解決這個問題,有條件地插入我的<table>標籤?

+1

如果在一個if語句中包含整個「

...
」,它會起作用嗎?如果是這樣,你應該改變你的代碼,而不是。在哪種情況下,你想有條件地打印表頭和頁腳標籤,但不是有條件地打印表內的內容?如果條件是錯誤的,你會不會最終得到隨機的''和'​​'標籤? – qJake

+0

我的代碼塊位於'foreach(){}'內,表格通過表值(表示實體類型)來分隔我的實體,而且我只希望每個類型都有一個表。 'if(){}'檢查已更改的表類型(因爲實體列表是按該類型排序的)。 – Kehlan

回答

27

嘗試用前面加上標籤@:

if (true) 
{ 
    @:<table> 
     @:<tbody> 
} 

... 

if (true) 
{ 
     @:</tbody> 
    @:</table> 
} 
+0

+1這實際上看起來比我的答案好。 – Fenton

+0

這絕對是最好的解決方案。謝謝! – Kehlan

+4

爲什麼剃鬚刀自動格式將結束標籤放在一個新的線上? –

1

Razor確實希望匹配的結束標籤默認處於語句內部。

您可以使用特殊<text>標籤,以幫助剃刀出來:

@if (true) { 
    <text> 
    <table> 
     <tbody> 
    </text> 
} 
+1

剃刀仍然抱怨,因爲它承認'

'和''是HTML標籤,並且期望它們在標籤關閉之前關閉。 – StriplingWarrior

+0

我使用VS2012,MVC4,它適用於我。你用同樣的東西嗎?無論如何,你仍然會收到關於結束標籤的警告,這就是爲什麼我更喜歡D斯坦利的答案。 – Fenton

+0

是的,我想這並不妨礙Razor識別'}',但正如你所說,仍然有警告。 – StriplingWarrior

2

您可以將它作爲字符串,那麼他們不會解析爲html和不符合語法地干擾:

@Html.Raw(true?"<table><tbody>":"") 

@Html.Raw(true?"</tbody></table>":"")