使用 MVC,我如何根据 <td> 之一中包含的日期将 <tr> 格式化为某个 class?

With MVC, how can I format <tr> with a certain class based on the date contained in one of the <td>?

我有一个显示 Windows 部署进度的 MVC 应用程序。在我看来,我有一个 table 显示每个部署的当前状态。其中一个属性是最后一次签入部署 ('CurrentTime')。如果当前时间超过 4 小时,我想更改样式。

在我的 MVC 视图中,我试图做这样的事情:

@foreach (var item in Model)
{
    if(item.CurrentTime < DateTime.Now.AddHours(-4))
    {
        @:<tr class="warning">
    }
    else
    {
        @:<tr>
    }

这是行不通的。我收到解析器错误:

Encountered end tag "tr" with no matching start tag. Are your start/end tags properly balanced?

有什么简单的方法(我正在学习 MVC/web 编程)来完成这个?

我的猜测是 </tr> 以某种方式放错了位置,这就是您收到错误的原因。

您可以将 if 语句替换为使用内联 if。这将使您的 HTML 更易于阅读并最终维护。

<tr class="@((item.CurrentTime < DateTime.Now.AddHours(-4) ? "warning" : ""))">
    <!--- Your row contents -->
</tr>

执行此操作的最简单(且更清洁)的方法是执行以下操作:

@foreach (var item in Model)
{
    var warning = item.CurrentTime < DateTime.Now.AddHours(-4) ? "warning" : null;
    <tr class="@warning">
       <td></td>
    </tr>
}

Razor 2+ 的一个不错的功能是,如果值为 null,它会自动删除 class 属性。此功能称为 "Conditional Attributes",如果需要,您可以在此处阅读更多内容。

http://www.davidhayden.me/blog/conditional-attributes-in-razor-view-engine-and-asp.net-mvc-4