MVC Razor,将if语句添加到foreach循环中

时间:2014-01-23 07:22:08

标签: asp.net-mvc razor if-statement foreach

我正在尝试将模型中的数据添加到带有剃刀的表格中。我的问题是我想要一个if语句来决定tagg应该是什么类,我不能让它工作。

当我添加if时,我在运行代码时出现以下错误

The foreach block is missing a closing "}" character

我应该如何添加if语句?这是我目前的代码

@{
      var counter = 0;            
}
@foreach (var item in Model)
{
       if(item.status == "Active") {
           <tr>
       }
       else {
           <tr class="danger">
       }
       <td>@counter</td>
       <td>@item.FirstName @item.LastName</td>
       <td>@item.Email</td>
       <td>@item.PhoneNumber</td>
       <td>Ändra</td>
       <td>Inaktivera</td>
        </tr>     
counter++;
}

5 个答案:

答案 0 :(得分:26)

MVC应检测html标签并将其渲染出去,但似乎这并不总是有效。

在大括号之间,尝试添加标记

例如:

{
<text> 
   your html 
</text>
} 

如果您只是添加课程,请尝试以下内容:

<tr @(item.status == "Active" ? String.Empty : "class=\"danger\"" )>

答案 1 :(得分:4)

尝试以下代码。

@{
    var counter = 0;            
}
@foreach (var item in Model)
{
       if(item.status == "Active") {
          <text> <tr> </text>
       }
       else {
           <text><tr class="danger"></text>
       }
       <td>@counter</td>
       <td>@item.FirstName @item.LastName</td>
       <td>@item.Email</td>
       <td>@item.PhoneNumber</td>
       <td>Ändra</td>
       <td>Inaktivera</td>
        </tr>     
    counter++;
}

答案 2 :(得分:1)

您可以根据需要添加采用bool或字符串的扩展方法

public static class HtmlHelpExtention
        {  
          public static string IsChecked(this IHtmlHelper htmlHelper,bool IsCheck, string className)
            {
                return IsCheck? className:"";
            }
         }

然后在视图中使用它

<tr class="@Html.IsChecked(item.IsGift,"teal accent-3")">

使用此方法将使您能够使用多个类

答案 3 :(得分:1)

MVC检测HTML标记。因此它不会添加if语句。 您也不能使用<tr>

您需要检查 @{ var counter = 0; } <table> @foreach (var item in Model) { <tr @(item.status=="Active" ? String.Empty : "class=\" danger\"")> <td>@counter</td> <td>@item.FirstName @item.LastName</td> <td>@item.Email</td> <td>@item.PhoneNumber</td> <td>Ändra</td> <td>Inaktivera</td> </tr> counter++; } </table> 标记本身中的条件。参见下面的给定结果。

{{1}}

答案 4 :(得分:0)

Love Pandey解决方案适用于我,但仅适用于一个班级名称。对于多个类名,浏览器将第二名解释为单独的属性。我对此的修改如下:

    @{
        var counter = 0;
    }
    <table>
        @foreach (var item in Model)
            string className = item.status=="Active" ? String.Empty : "item second-class-name";
            {
                <tr class="@className">
                <td>@counter</td>
                <td>@item.FirstName @item.LastName</td>
                <td>@item.Email</td>
                <td>@item.PhoneNumber</td>
                <td>Ändra</td>
                <td>Inaktivera</td>
                </tr>
                counter++;
             }
         </table>