184

虽然 Microsoft 在 razor MVC4 中创建了一些html 属性的自动渲染,但我花了很长时间才了解如何根据条件 razor 表达式在元素上渲染第二个 css 类。我想和你分享。

基于模型属性@Model.Details,我想显示或隐藏一个列表项。如果有详细信息,则应显示 div,否则应将其隐藏。使用 jQuery,我需要做的就是分别添加一个类 show 或 hide。出于其他目的,我还想添加另一个类,“详细信息”。所以,我的标记应该是:

<div class="details show">[Details]</div>或者<div class="details hide">[Details]</div>

下面,我展示了一些失败的尝试(假设没有细节导致标记)。

这:<div @(@Model.Details.Count > 0 ? "class=details show" : "class=details hide")>

将呈现这个:<div class="details" hide="">

这:<div @(@Model.Details.Count > 0 ? "class=\"details show\"" : "class=\"details hide\"")>

将呈现这个:<div class=""details" hide&quot;="">

这:<div @(@Model.Details.Count > 0 ? "class='details show'" : "class='details hide'")>

将呈现这个:<div class="'details" hide&#39;="">

这些都不是正确的标记。

4

4 回答 4

360

我相信观点上仍然存在有效的逻辑。但是对于这种事情我同意@BigMike,最好放在模型上。话虽如此,这个问题可以通过三种方式解决:

您的答案(假设这有效,我还没有尝试过):

<div class="details @(@Model.Details.Count > 0 ? "show" : "hide")">

第二种选择:

@if (Model.Details.Count > 0) {
    <div class="details show">
}
else {
    <div class="details hide">
}

第三个选项:

<div class="@("details " + (Model.Details.Count>0 ? "show" : "hide"))">
于 2013-03-29T10:01:53.393 回答
76

这:

    <div class="details @(Model.Details.Count > 0 ? "show" : "hide")">

将呈现这个:

    <div class="details hide">

并且是我想要的标记。

于 2013-03-29T09:40:29.127 回答
28

您可以按如下方式向模型添加属性:

    public string DetailsClass { get { return Details.Count > 0 ? "show" : "hide" } }

然后您的视图将更简单,并且根本不包含任何逻辑:

    <div class="details @Model.DetailsClass"/>

这甚至适用于许多类,并且如果它为空,则不会呈现类:

    <div class="@Model.Class1 @Model.Class2"/>

具有 2 个非空属性将呈现:

    <div class="class1 class2"/>

如果 class1 为空

    <div class=" class2"/>
于 2013-07-23T19:36:57.927 回答
6

您可以使用 String.Format 函数根据条件添加第二类:

<div class="@String.Format("details {0}", Details.Count > 0 ? "show" : "hide")">
于 2018-11-13T13:18:26.967 回答