使用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);
}

如何将MyViewModelFilterDescriptors映射到MyModel

我主要想实现我自己的IFilterDescriptor扩展。

使用ViewModels时的TelerikMvcExtensions网格过滤器

您可以从控制器返回所有记录,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);
}