2015-08-12 5 views
0

В зависимости от моей записи, я хотел бы изменить стиль строки таблицы в текущей текущей итерации.Написание условного HTML с бритвой

Нижеприведенный пример не работает, но как бы я сделал это правильно?

foreach (var item in Model) 
       { 
        @{ 
         if (item.DataState != DataState.Active) 
         { 
          <tr style="background-color: red"> 
         } 
         else 
          <tr> 
        } 
        <td>@item.Name</td> 
        </tr> 
       } 

Так эффективно, я хотел бы динамически оказывать <tr> элемент по-разному на основе DataState моей модели.

+0

Так как вы уже в блоке кода (Еогеасп) вам не нужно добавлять другой код с помощью @ {}. В вашем коде есть еще одна проблема: Razor не поддерживает IF и ELSE без скобок. Вы должны положить часть else в скобки. Посмотрите на мой ответ - есть более короткий подход. – Skuami

ответ

6

Вот короткий подход:

@foreach (var item in Model) 
{ 
    <tr @(item.DataState != DataState.Active ? "style=background-color:red" : "")> 
     <td>@item.Name</td> 
    </tr> 
} 

Edit: Код фиксированной

+0

Он, похоже, не работает. Строка отображается как: ' ' –

+0

Я исправил его, удалив все пробелы из свойств и значений css. Странный. Теперь: '' Не могли бы вы обновить свой ответ, чтобы отметить пробелы? Тогда я отмечу это как ответ. Благодаря тонну. –

+0

Я исправил код. Я предлагаю вам использовать классы css вместо изменения стиля, подобного этому. – Skuami

0

Не уверен, что за ошибка, с которой вы сталкиваетесь прямо сейчас, но я понимаю, что ваша проблема заключается в том, что Razor не понимает всех случаев сложного рендеринга html.

Вы можете заставить его оказывать html, где вам нужно с @: символом одной строки или <text> тега, как это:

@foreach (var item in Model) 
{ 
    if (item.DataState != DataState.Active) 
    { 
     @: <tr style="background-color: red"> 
    } 
    else 
    { 
     <text><tr></text> 
    } 
    <td>@item.Name</td> 
    </tr> 
} 
3

Есть Многократно вы можете написать условие.

Вариант 1:

@foreach (var item in Model) 
{ 
    if (item.DataState != DataState.Active) 
    { 
     <tr style="background-color: red"> 
      <td>@item.Name</td> 
     </tr> 
    } 
    else 
    { 
     <tr> 
      <td>@item.Name</td> 
     </tr> 
    } 
} 

Вариант 2:

@foreach (var item in Model) 
{ 
    <tr style="@(item.DataState != DataState.Active ? "background-color: red;" : "")"> 
     <td>@item.Name</td> 
    </tr> 
} 
+0

Ответьте на самый тщательный ответ. #thumbsup @sender – scgough

0

Вы, вероятно, собираетесь получить ошибки компиляции, если вы начнете разделив тег <tr> вверх в представлении и I 'd не дублировать большие куски кода. Я бы сделал следующее:

@foreach(var item in Model) { 
    string strStyle=String.Empty; 
    if(item.DataState!=DataState.Active) { strStyle = "background-color:red;" } 
    <text> 
    <tr style="@strStyle"> 
     <td>@item.Name</td> 
    </tr> 
    </text> 
} 
0

Определить атрибуты в переменной. Бритва анализатор будет опустить атрибут, если его значение null

@foreach (var item in Model) 
{ 
    var attributes = item.DataState == DataState.Active ? null : "background-color: red"; 
    <tr [email protected]> 
    <td>@item.Name</td> 
    </tr> 
} 
Смежные вопросы