将css类添加到MVCContrib网格中的行

时间:2012-03-17 18:42:40

标签: asp.net asp.net-mvc razor mvccontrib

我正在显示数据网格,其中一个属性是到期日期。如果失效日期少于60天,我想突出显示该行。

我找到this post,并在那里使用答案来使用RowAttributes函数:

@Html.Grid(Model.PagedList).Columns(column =>{
    column.For(m => m.Name);
    column.For(m => m.ExpirationDate);        
}).Sort(Model.GridSortOptions)
.Attributes(@class => "grid")
.RowAttributes(m => new MvcContrib.Hash(@class =>
    (m.Item.ExpirationDate.Value.AddDays(-60) < DateTime.Now)) ? "warning" : "")

但是我收到编译错误说:

  

无法将类型'MvcContrib.Hash'隐式转换为'bool'

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

以下对我来说很好:

型号:

public class MyViewModel
{
    public DateTime? ExpirationDate { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new[]
        {
            new MyViewModel { ExpirationDate = DateTime.Now.AddDays(70) },
            new MyViewModel { ExpirationDate = DateTime.Now.AddDays(30) },
            new MyViewModel { ExpirationDate = DateTime.Now.AddDays(90) },
        };
        return View(model);
    }
}

查看:

@using MvcContrib.UI.Grid
@using MvcContrib
@model IEnumerable<MyViewModel>

@(Html
    .Grid(Model)
    .Columns(column => {
        column.For(m => m.ExpirationDate);
    })
    .Attributes(@class => "grid")
    .RowAttributes(m => new Hash(@class => (m.Item.ExpirationDate.Value.AddDays(-60) < DateTime.Now) ? "warning" : "" ))
)

您还可以为您的模型编写扩展方法:

public static class RowAttributesExtensions
{
    public static Hash GetRowAttributes(this MyViewModel model)
    {
        return new Hash(@class => (model.ExpirationDate.Value.AddDays(-60) < DateTime.Now) ? "warning" : "");
    }
}

然后:

@(Html
    .Grid(Model)
    .Columns(column => {
        column.For(m => m.ExpirationDate);
    })
    .Attributes(@class => "grid")
    .RowAttributes(m => m.Item.GetRowAttributes())
)

使其更具可读性。