我试图找出过滤网格的最简单方法。
@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。
答案 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);
}