2011-01-28 21 views
8

Estoy tratando de hacer una vista muy simple usando la sintaxis de Razor en MVC3, pero parece que no puedo obtener la sintaxis correcta.MVC3 Razor Problemas de sintaxis

Tengo una tabla simple como esto

<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> 

Al insertar el y el interior de la sentencia if, recibo este error

El uso de bloque le falta un cierre "}" carácter .

Si trato de envolver esas dos etiquetas en el interior y, consigo este error en su lugar:

El elemento "tr" no se cerró.

Respuesta

14

Sus </tr><tr> mete hasta el "flujo" de la mezcla de html/código.

Está cerrando la etiqueta tr en un nivel diferente, no en un nivel diferente en el html, pero dentro del código. Debes engañar a la afeitadora para que emita html, que no se analiza automáticamente.

Se podría incluirlos como esto:

@:</tr><tr> 

o

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

El resultado:

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

Haga clic para usted son MixIn de Haack quick reference of Razor syntax

+1

+1 Además de la referencia rápida de Phils, me gustaría tener una referencia completa. –

+0

@Martin: Sí, yo también. Aunque la sintaxis es realmente fácil y agradable de usar. – GvS

+2

Me pregunto si eso sería algo para una wiki de la comunidad. Realmente podría usarlo. Incluso si la sintaxis de la afeitadora es muy limpia, a veces se mete en mi cerebro;) –

3

Yo diría que te falta el @ delante de la instrucción if. Pruebe @if(counter % 2 == 0).

Espero que ayude.

actualización

he comprobado y la respuesta de GvS parece funcionar muy bien. El @ no es necesario para la instrucción if.

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

¿Por qué? Está directamente dentro de un bloque de código Razor, no rodeado de etiquetas. El 'if' debería funcionar sin @ – GvS

+0

Porque los contenidos están mezclados. – jgauffin

+0

@GvS: Lo revisé y tienes razón. '@:' funciona bien. –

0

g HTML y código en el foreach. Es por eso que tienes problemas.

De cualquier uso <text></text> bloque de todo el HTML, o haga lo siguiente:

<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>