根据值更改颜色

时间:2010-07-15 03:52:54

标签: c# jquery html asp.net-mvc html.encode

我有很多字段,如果过期,我想以红色显示数据。

<%= Html.Encode(String.Format("{0:d}", Model.Subcontract.insurance_GL))%>

如果日期小于今天的日期,那么我希望它以红色显示。这样做的最佳方式是什么?

修改 这是我的详细信息视图。它不在网格中。它只是单个转包合同的字段列表。有,insurance_GL,insurance_AL,insurance_WC等。不同的字段,不是网格中重复的相同字段。

2 个答案:

答案 0 :(得分:4)

如果值小于零,我会在字段中添加一个类。

所以我不确定哪些类型的HTML元素包含你的字段值,但是使用你的例子我会这样做:

<span class="<%=(Model.Subcontract.insurance_GL < 0 ? "red" : "black")%>"
  <%= Html.Encode(String.Format("{0:d}", Model.Subcontract.insurance_GL))%>
</span>

答案 1 :(得分:3)

这实际上取决于您在客户端页面中呈现数据的方式。你在使用带有GridView的asp.net表单吗?你自己为你的数据生成html吗?

我通常用css类来解决这个问题。我将有一个标记项目的类,如下所示:

.late
{
    color: #f00;
}

在后面的代码中,生成我的html的地方,如果你自己创建所有的html:

foreach(Item item in items)
{
    string cls = "";
    if (item.IsLate)
        cls = " class='late'";
    html += "<div" + cls + ">" + item.Text + "</div>";
}

这将为非延迟项目创建<div>Item1</div>,为迟到项目创建<div class="late">Item2</div>。如果您希望它们以某种方式设置样式,您也可以为非延迟项目设置课程。很容易。

如果您要标记的项目是服务器控件,而您自己没有创建html,则可以为它们分配一个类:

if (item1.IsLate)
    myTextBox.CssClass = "late";

如果您的数据绑定到GridView,您可以拥有RowDataBound的事件处理程序,并执行以下操作:

protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Item item = e.Row.DataItem as Item;
        if (item.IsLate)
            e.Row.CssClass = "late";
    }
}

您还可以将样式应用于GridView中的单个单元格:

// 3rd cell
e.Row.Cells[2].CssClass = "late";

希望其中一个符合您的情况。