سؤال

I'm displaying a grid of data, and one of the attributes is an expiration date. If the expiration date is less than 60 days away, I'd like to highlight the row.

I found this post, and used the answer there to use the RowAttributes function:

@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" : "")

But I get a compilation error saying:

Cannot implicitly convert type 'MvcContrib.Hash' to 'bool'

What am I doing wrong here?

هل كانت مفيدة؟

المحلول

The following works fine for me:

Model:

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

Controller:

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);
    }
}

View:

@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" : "" ))
)

You could also write an extension method for your model:

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

and then:

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

which makes it more readable.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top