如果是Razor Views的Statement(For CSS Class)

Joh*_*nC1 13 c# asp.net-mvc html-helper razor

我需要在CSS类之间切换,具体取决于是否读取了消息.

简单来说,应该是这样的:

if (item.status == "Unread")
{
  <tr style="font-weight:bold">
  ...
}
else
{
  <tr>
  ...
}
Run Code Online (Sandbox Code Playgroud)

我虽然无法实现这一目标.能告诉我一件好事吗?我应该使用HTML帮助器吗?

这是到目前为止的完整代码:

@foreach (var item in Model) {

    if (item.status == "Unread")
    {
        <tr style="font-weight:bold">
            <td>
                @Html.DisplayFor(modelItem => item.timestamp)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.subject)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.message_text)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.status)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.user_sender.username)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.user_reciever.username)
            </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)

p.s*_*w.g 35

一个简单的解决方案是这样的:

@foreach (var item in Model) 
{
    var style = (item.status == "Unread") ? "font-weight:bold" : "";

    <tr style="@style">
        ...
    </tr>
}
Run Code Online (Sandbox Code Playgroud)

但是请注意,拥有一个单独的CSS类通常更清晰,然后根据其状态直接装饰相应类的元素.例如:

/* css */
tr.status-unread { font-weight: bold; }
...

/* razor */
@foreach (var item in Model) 
{
    <tr class="status-@item.status.ToLowerInvariant()">
        ...
    </tr>
}
Run Code Online (Sandbox Code Playgroud)