2011-01-28 15 views
8

Sto cercando di ottenere una visualizzazione molto semplice usando la sintassi del rasoio in MVC3, ma sembra che non riesca a ottenere la sintassi corretta.Problemi di sintassi del rasoio MVC3

Ho una tabella semplice come questo

<table> 
       <tr> 
        @{ 
         var counter = 0; 
        } 

        @foreach (var category in ViewBag.Categories) 
        { 
         counter++; 
         <td> 
          <input type="checkbox" checked="checked" name="@("category" + category.Code)" /> 
          @category.Description 
         </td> 

         if (counter % 2 == 0) 
         { 
          </tr> 
          <tr> 
         } 
        } 
       </tr> 
      </table> 

Quando si inserisce il e dentro la se-dichiarazione, ricevo questo errore

Il blocco utilizzando manca una chiusura "}" carattere .

Se cerco di avvolgere questi due tag all'interno e, ottengo questo errore invece:

L'elemento "tr" non è stato chiuso.

risposta

14

vostri </tr><tr> scombina il "flusso" del codice HTML/mix.

Si sta chiudendo il tag tr su un livello diverso, non su un livello diverso nell'html, ma all'interno del codice. Dovresti ingannare il rasoio affinché emetta html, che non si analizzi da solo.

Si potrebbe includerli in questo modo:

@:</tr><tr> 

o

@Html.Raw("</tr><tr>") 

Il risultato:

     if (counter % 2 == 0) 
         { 
          @:</tr><tr> 
         } 

Fai clic per di Haack quick reference of Razor syntax

+1

+1 Oltre al riferimento rapido di Phils mi piacerebbe avere un riferimento completo là fuori. –

+0

@ Martin: Sì anche a me. Anche se la sintassi è reale facile e piacevole da usare. – GvS

+2

Mi chiedo se quello sarebbe qualcosa per una wiki della comunità? Potrei davvero usarlo. Anche se la sintassi del rasoio è molto pulita, a volte è un problema con il mio cervello;) –

3

Direi che manca la @ davanti all'istruzione if. Prova @if(counter % 2 == 0).

Spero che questo aiuti.

Aggiornamento

ho controllato fuori e la risposta da GvS sembra funzionare bene. @ Non è necessario per l'istruzione if.

@for (int i = 0; i < 5; i++) 
{ 
    if (i == 3) 
    { 
     @:</tr><tr> 
    } 
} 
+0

Perché? Si trova direttamente all'interno di un blocco di codice Razor, non circondato da tag. Il 'if' dovrebbe funzionare senza @ – GvS

+0

Perché i contenuti sono misti. – jgauffin

+0

@GvS: l'ho controllato e hai ragione. '@:' funziona correttamente. –

0

Lei Mixin g HTML e codice nel foreach. Ecco perché hai problemi.

usare sia <text></text> blocco intorno al HTML, o procedere come segue:

<table> 
    <tr> 
     @{ 
      var counter = 0; 
     } 

     @foreach (var category in ViewBag.Categories) 
     { 
      @{ 
       counter++; 
      } 

      <td> 
       <input type="checkbox" checked="checked" name="@("category" + category.Code)" /> 
       @category.Description 
      </td> 

      @if (counter % 2 == 0) 
      { 
       </tr> 
       <tr> 
      } 
     } 
    </tr> 
</table> 
Problemi correlati