Добавить класс CSS в строку в сетке MVCContrib - PullRequest
2 голосов
/ 17 марта 2012

Я отображаю сетку данных, и одним из атрибутов является дата истечения срока действия. Если срок действия истекает менее чем через 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'

Что я здесь не так делаю?

1 Ответ

3 голосов
/ 18 марта 2012

Для меня нормально работает:

Модель:

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

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

...