MVC Razor, добавить оператор if в цикл 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++;
}

Ответ 1

MVC должен обнаруживать html-теги и выводить их, однако, похоже, что это не всегда работает.

Внутри фигурных скобок попробуйте добавить тег

например:

{
<text> 
   your html 
</text>
} 

или

если вы просто добавляете класс, попробуйте что-то вроде:

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

Ответ 2

попробуйте выполнить код ниже.

@{
    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++;
}

Ответ 3

Вы можете добавить метод расширения, который принимает bool или string, зависит от ваших потребностей.

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

с использованием этого метода даст вам возможность использовать несколько классов

Ответ 4

MVC обнаруживает теги HTML. Так что это не добавит, если выражение, как это. Вы не можете использовать <text><text> также.

Вам нужно проверить условие в самом теге <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>

Ответ 5

Решение 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>