Razor索引视图中的条件格式

Phi*_*ove 23 razor asp.net-mvc-3

我试图有条件地将CSS添加background-color到一组表行,具体取决于项目的到期日期的接近程度.30天或更短时间应为红色,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>
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个页面时,我得到一个YSOD说该@foreach块没有关闭它},但据我所知它们是匹配的所以我假设实际问题是别的.

SLa*_*aks 47

Razor要求代码块内部的标签平衡且格式良好.
因此,第一个开始<tr>标记之后的所有代码实际上都被解析为标记,因此最终}只是关闭了if.

要解决这个问题,你可以强制Razor通过在行前加上来忽略标记@:.

或者,你可以if完全摆脱写作

string style = daysLeft <= 30 ? "background-color:Red" : null;
<tr style="@style">
    ...
</tr>
Run Code Online (Sandbox Code Playgroud)


rea*_*ers 20

使用条件运算符

布尔条件?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" : "")">   
.....
}
Run Code Online (Sandbox Code Playgroud)