【问题标题】:Razor if / else inside a for loop: The for block is missing a closing "}" character剃刀 if / else 在 for 循环中:for 块缺少结束“}”字符
【发布时间】:2014-01-28 18:17:13
【问题描述】:

我在 MVC 中用 Razor 语法做一个简单的 for 循环:

@for (int i = 0; i < Model.ProductViewModels.Count; i++)
{
    if (i%2 == 0)
    {
        <div class="row">
    }
        <div class="col-md-4">
      <a href="/product?id=@Model.ProductViewModels[i].Id">@Model.ProductViewModels[i].Title - @Model.ProductViewModels[i].Isbn13
                <br />
                <img src="@Model.ProductViewModels[i].ImageUrl" />
            </a>
</div>

@if (i%2 == 0)
    {
        </div>
    }
}

在我看来,这似乎是相当合法的代码,但它不起作用!

我得到错误:

Meddelelse om parserfejl: The for block is missing a closing "}" character.  Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup.

错误截图:

有什么想法吗? :) 谢谢

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

这是一个可行的解决方案,我在 Visual Studio 中的 Razor 视图上进行了测试。您必须正确使用 @:

  @for (int i = 0; i < Model.ProductViewModels.Count; i++)
  {            
       if (i % 2 == 0)
       {
           @:<div class="row">
       }

       <div class="col-md-4">
          <a href="/product?id=@Model.ProductViewModels[i].Id">@Model.ProductViewModels[i].Title - @Model.ProductViewModels[i].Isbn13
          <br />
          <img src="@Model.ProductViewModels[i].ImageUrl" />
          </a>
       </div>

       if (i % 2 == 0)
       {
            @:</div>
       }            
   }

【讨论】:

    【解决方案2】:

    你需要使用文本标签

    if (i%2 == 0)
    {
        <text>
            <div class="row">
        </text>
    }
    

    这里是更多信息的链接http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx

    【讨论】:

      【解决方案3】:

      这个解决方案对我有用:

      `

      @foreach (var item in Model.listItems)
      {
           if (item.isValid){
                  @:<div class="validClass">
           }else{
                  @:<div class="invalidClass">
           }
           @:</div>
      }
      

      `

      您可以尝试其他解决方案:

      &lt;div class="@if(item.isValid){WriteLiteral("validClass");}" &gt;&lt;/div&gt;

      【讨论】:

      • 解释为什么这个解决方案是有效的,不要只是在这里粘贴代码,对于将您的专业知识带到答案中,帮助其他人解决类似问题很重要。
      • 第一个解决方案是有效的,但第二个解决方案是最佳的
      【解决方案4】:

      试试这个方法:

      if (i%2 == 0)
      {
          @:<div class="row">
      }
      

      或者:

      if (i%2 == 0)
      {
          <text>
              <div class="row">
          </text>
      }
      

      阅读此article

      【讨论】:

        【解决方案5】:

        您在上面的行中缺少一个“}”(第 8 行,在开始您粘贴的代码之前)。您在此处粘贴的代码没有任何问题。

        【讨论】:

          猜你喜欢
          • 2017-08-02
          • 2019-12-04
          • 1970-01-01
          • 2012-11-13
          • 1970-01-01
          • 2021-09-16
          • 2019-11-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多