2013-07-01 3 views
11

Questo codice, in una vista Razor:Razor `if` non si registra chiudendo`} `se c'è un tag` <table> `aperto?

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

... 

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

non funziona. Sostiene che non c'è nessuna chiusura } sulla prima dichiarazione if(), e suppongo che sia a causa del tag <table>.

C'è un modo per aggirare questo problema per inserire condizionatamente i tag <table>?

+1

Funziona se si racchiude l'intero '

...
' all'interno di una singola istruzione if? Se è così, dovresti invece cambiare il tuo codice con quello. In quale scenario si desidera stampare condizionatamente i tag di intestazione e piè di pagina della tabella, ma non stampare in modo condizionale ciò che si trova all'interno della tabella? Non ti ritroverebbero con i tag '' e '' casuali se la condizione fosse falsa? – qJake

+0

Il mio blocco di codice si trova all'interno di un 'foreach() {}' e la tabella separa le mie entità in base al valore della tabella (che indica il tipo di entità) e desidero solo una tabella per tipo. 'If ​​() {}' verifica che il tipo di tabella sia cambiato (poiché l'elenco di entità è ordinato da quel tipo). – Kehlan

risposta

27

Prova anteporre i tag con @::

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

... 

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

+1 Questo in realtà sembra migliore della mia risposta. – Fenton

+0

Questa è sicuramente la soluzione migliore. Grazie! – Kehlan

+4

Perché il formato automatico del rasoio inserisce i tag di chiusura su una nuova riga? –

1

Razor fa aspettare l'abbinamento tag di chiusura di essere all'interno della dichiarazione di default.

È possibile utilizzare la speciale <text> tag per aiutare Razor out:

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

Razor continua a lamentarsi perché riconosce "

" e "" sono tag HTML e si aspetta che si chiudano prima che il tag '' si chiuda. – StriplingWarrior

+0

Sto usando VS2012, MVC4 e funziona per me. Stai usando lo stesso? In ogni caso, ricevi ancora avvertimenti sui tag di chiusura, motivo per cui preferisco la risposta di D Stanley. – Fenton

+0

Sì, immagino che questo non impedisca a Razor di riconoscere "}", ma come dici tu ci sono ancora degli avvertimenti. – StriplingWarrior

2

è possibile inserirlo come stringhe, allora non vengono analizzati come HTML e non interferire con la sintassi:

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

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