如果在 MVC5 中开始元素损坏了?

if with start elements broken in MVC5?

做一些简单的事情:

<table>
    <body>
      @foreach (PlayerBanModel ban in Model.Bans)
      {
         if (ban.Active)
         {
           <tr style="background: yellow">
         }
         else
         {
            <tr style="background: lightgrey">
         }


       <td>@ban.Active </td>
       </tr>
       }
  </table>

我省略了所有其他字段,以及 header 行。

因为是"The foreach block is missing a closing "}”字符而抛出错误。”

当然不是,但它看到两个 tr - 每个条件一个,并且没有意识到(显然)只有其中一个会被渲染,它希望我关闭在 }

之前

我尝试添加:

             if (false)
             {
             </tr>
             }

但它显然足够聪明,可以删除它。

我试着把它放在一个条件中:

<tr style="background: @{return (ban.Active?"white":"lightgrey"}>

以及各种类似的尝试。 我也许可以把它放在自己的部分中,但我预计这也行不通。

有什么建议吗?

我正在使用 MVC5

您的条件格式不正确。使用显式代码块时,您只需将条件语句括在方括号中,而不是大括号中,无需 return 语句。

<tr style="background: @(ban.Active ? "white" : "lightgrey")">

至于您的原始代码,解析器将某些标记解释为代码,因为它在 if 语句中。您可以使用 @: 将这些行标记为特定的文本,但只执行内联条件更容易。

<table>
  <tbody>
    @foreach (PlayerBanModel ban in Model.Bans) {
      if (ban.Active) {
        @:<tr style="background: yellow">
      }
      else {
        @:<tr style="background: lightgrey">
      }
      <td>@ban.Active </td>
      @:</tr>
    }
  </tbody>
</table>