TelerikMvcExtensions使用ViewModels时网格过滤器

时间:2014-10-28 15:12:06

标签: c# lambda telerik-grid telerik-mvc

我试图找出过滤网格的最简单方法。

@Html.Telerik().Grid<MyViewModel>()
     .Name("Grid")
     .Filterable();

我在我的View中使用ViewModels,在Controller中使用DomainModels。我使用AutoMapper在它们之间进行映射。 问题是Telerik网格没有设计用于ViewModel,因此过滤器逻辑搞砸了:(

[GridAction(EnableCustomBinding = true)]
public JsonResult SelectHandled(GridCommand command)
{
    var items = _repository.AsQueriable()
                    .Where(command.FilterDescriptors) // <-------- this won't work
                    .Page(command.Page, command.PageSize);

    var vms = Mapper.Map<IEnumerable<MyModel>, IEnumerable<MyViewModel>>(items);

    var model = new GridModel
    {
        Data = vms,
        Total = // omitted
    };
    return Json(model);
}

如何将FilterDescriptors的{​​{1}}映射到MyViewModel

我基本上想要实现自己的IFilterDescriptor Extension

1 个答案:

答案 0 :(得分:0)

您可以从控制器返回所有记录,Telerik网格自行管理过滤逻辑。从您的代码中,您可以尝试:

[GridAction(EnableCustomBinding = true)]
public ActionResult SelectHandled(GridCommand command)
{
    IEnumerable<MyViewModel> items = _repository.Get();

    var vms = Mapper.Map<IEnumerable<MyModel>, IEnumerable<MyViewModel>>(items);

   var retColl = new GridModel(vms) { Total = command.PageSize * command.Page };
   return View(retColl);
}