MVC3剃刀语法困扰

问题描述:

我试图让使用剃刀语法MVC3一个很简单的观点,但似乎我不能让语法正确。MVC3剃刀语法困扰

我有一个简单的表像这样

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

当我插入和if语句里面,我收到此错误

的使用块缺少结束“}”字符。

如果我尝试包裹内这两个标签,而且我得到这个错误,而不是:

的“TR”元素没有关闭。

您的</tr><tr>混淆了html/code混合的“流”。

您关闭在不同的级别,而不是一个不同的水平在HTML中的TR-标签,但里面的代码。你应该把剃须刀变成输出html,它不会自己解析。

您可以包括他们是这样的:

@:</tr><tr> 

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

结果:

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

点击查看哈克的quick reference of Razor syntax

我会说你错过了if语句前面的@。尝试@if(counter % 2 == 0)

希望有所帮助。

更新

我检查出来,并从GvS答案似乎工作得很好。 @对if语句没有必要。

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

为什么?他直接在Razor代码块内,不被标签包围。 “if”应该不用@ – GvS 2011-01-28 11:06:33

+0

因为内容是混合的。 – jgauffin 2011-01-28 11:15:26

您MIXIN g HTML和代码在foreach中。这就是为什么你会遇到问题。

要么使用<text></text>块周围的HTML,或执行以下操作:

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