1
我想弄清楚过滤网格的最简单方法。TelerikMvcExtensions使用ViewModels时的网格过滤器
@Html.Telerik().Grid<MyViewModel>()
.Name("Grid")
.Filterable();
我在View中使用ViewModels,在Controller中使用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);
}
如何映射FilterDescriptors
为MyViewModel
到MyModel
?
我基本上是想实现自己的IFilterDescriptor Extension
这只会做客户端过滤。所以为了工作,我不得不将整个列表发送给客户端,这是不行的。 – 2014-10-28 17:38:59
如果您要从db中获取所有记录,然后尝试使用'.Where(command.FilterDescriptors)'手动应用过滤,那么我认为不会有太大的性能提升。所以我仍然希望返回所有记录,并让网格自行处理过滤逻辑,以避免复杂性。 – 2014-10-28 18:18:29
'_repository.Get()'应该是'_repository.AsQueriable()'。更正了帖子。所以它在数据库上被过滤。 – 2014-10-28 19:06:55