0

我想根据被绑定项目的属性在具有特定 css 样式的表中设置一些行。使用 CSS 我应用了老虎条纹,我想应用的这种新的 css 样式应该是现有条纹的补充。

@foreach (var item in Model) {
<tr @if(item.IsComplete { class="complete"})>

虎纹是通过以下方式实现的:

table tr:nth-child(2n+0) {
    background-color: #90b2d3;
    color: white;
}

因此,每隔一行应该是带有白色文本的浅蓝色,但是该项目IsComplete应该添加“完整”css 样式的任何行。

.complete {
  font-style: italic;
  color: #ccc;
}

这只是为了让它看起来是灰色的和“完整的”。

但是,就我目前的代码而言,我得到了一个parser error

解析器错误消息:遇到没有匹配开始标记的结束标记“tr”。您的开始/结束标签是否正确平衡?

我不明白,<tr>它存在于我的第一个代码块中,并且@ IsComplete剃刀语法应该只是有条件地包含一个 css 类。

我知道这种方法确实意味着,如果老虎条纹要为一行着色,并且IsComplete属性要添加一个 css 类,那么只有其中一个会被使用 - 我希望在弄清楚有什么问题后处理这个问题这里的语法。虽然如果有一种方法可以同时应用这两个类(如果需要的话),那就太棒了。

4

2 回答 2

2

试试这样:

<tr@(Html.Raw(item.IsComplete ? " class=\"complete\"" : ""))>

或编写自定义 HTML 帮助程序来避免标签汤。

于 2013-03-11T12:46:00.040 回答
0

按照达林的建议,我实施了一个Custom HTML helper,我正在分享它,因为它回答了主要问题,尽管它取代了老虎条纹 - 所以还有更多的工作要做,所以原始的老虎条纹得到尊重,这增加了现有的类

public static MvcHtmlString ConditionalCss(this HtmlHelper htmlHelper, 
                                           bool isCompleted, string CssClass)
    {
        var Css = String.Empty;
        if (isCompleted)
            Css = string.Format("class=\"{0}\"", CssClass);

        return MvcHtmlString.Create(Css);
    }

现在里面的调用foreach被简化为

@foreach (var item in Model) {
<tr @Html.ConditionalCss(item.IsComplete, "complete")>

这给了我一点灵活性;我可以提供任何 css 类和条件,在这种情况下应该添加 css

于 2013-03-11T13:28:51.813 回答