Условное форматирование в представлении Razor Index - PullRequest
21 голосов
/ 14 марта 2012

Я пытаюсь условно добавить CSS background-color в набор строк таблицы, основываясь на том, насколько близка дата истечения срока действия элемента.Тридцать или менее дней должны быть красными, 90-31 день янтарными, а остальные зелеными.(Я помещаю красный сначала, когда это сработает, я вернусь и сделаю янтарные / зеленые строки).

@foreach (var item in Model)
{
    int daysLeft = (item.ExpiryDate - DateTime.Today).Days;

    if (daysLeft <= 30)
    { 
         <tr style="background-color:Red">
    }
    else
    {
        <tr>
    }

        <td>
            @Html.DisplayFor(modelItem => item.SupplierName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ExpiryDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.InceptionDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Value)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
            @Html.ActionLink("Details", "Details", new { id = item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.Id })
        </td>
    </tr>
}

Когда я запускаю эту страницу, я получаю YSOD, говорящийВ блоке 1005 * отсутствует закрытие }, но, насколько я вижу, они совпадают, поэтому я предполагаю, что проблема фактическая - это нечто другое.

Ответы [ 2 ]

42 голосов
/ 14 марта 2012

Razor требует, чтобы теги непосредственно внутри блоков кода были сбалансированными и правильно сформированными.
Поэтому весь код после первого открывающего тега <tr> фактически анализируется как разметка, так что конечный } просто закрываетсяif.

Чтобы исправить это, вы можете заставить Razor игнорировать тег, добавив к строке префикс @:.

. Или вы можете полностью избавиться от if.и пиши

string style = daysLeft <= 30 ? "background-color:Red" : null;
<tr style="@style">
    ...
</tr>
18 голосов
/ 14 марта 2012

Используйте условный оператор

состояние bool? true_expression : false_expression ;

http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.80).aspx

@foreach (var item in Model)
{
    int daysLeft = (item.ExpiryDate - DateTime.Today).Days;

    <tr style="@(daysleft < 30 ? "Background-color:red" : "")">   
.....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...