使用ViewModels时的TelerikMvcExtensions网格过滤器
本文关键字:网格 过滤器 TelerikMvcExtensions 时的 ViewModels 使用 | 更新日期: 2023-09-27 18:28:18
我正在努力找出过滤网格的最简单方法。
@Html.Telerik().Grid<MyViewModel>()
.Name("Grid")
.Filterable();
我在视图中使用ViewModels,在控制器中使用DomainModels。我使用AutoMapper在它们之间进行映射。问题是Telerik网格的设计不适合与ViewModels一起使用,因此过滤器逻辑变得一团糟:(
[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);
}
如何将MyViewModel
的FilterDescriptors
映射到MyModel
?
我主要想实现我自己的IFilterDescriptor扩展。
您可以从控制器返回所有记录,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);
}