Добавьте класс css в строку в сетке MVCContrib

Я показываю сетку данных, и одним из атрибутов является дата истечения срока действия. Если до истечения срока действия осталось менее 60 дней, я хотел бы выделить строку.

Я нашел этот пост , и использовал ответ там, чтобы использовать функцию 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

Что я здесь делаю неправильно?


person Steven    schedule 17.03.2012    source источник


Ответы (1)


Следующее работает отлично для меня:

Модель:

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())
)

что делает его более читабельным.

person Darin Dimitrov    schedule 18.03.2012