c# – 如何使用Kendo UI Grid与ToDataSourceResult(),IQueryable,ViewModel和AutoMapper?

前端之家收集整理的这篇文章主要介绍了c# – 如何使用Kendo UI Grid与ToDataSourceResult(),IQueryable,ViewModel和AutoMapper?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用以下类加载/过滤/订购Kendo网格的最佳方法是什么?

域:

public class Car
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual bool IsActive { get; set; }
}

视图模型

public class Carviewmodel
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string IsActiveText { get; set; }
}

AutoMapper

Mapper.CreateMap<Car,Carviewmodel>()
      .ForMember(dest => dest.IsActiveText,src => src.MapFrom(m => m.IsActive ? "Yes" : "No"));

IQueryable的

var domainList = RepositoryFactory.GetCarRepository().GetAllQueryable();

DataSourceResult

var dataSourceResult = domainList.ToDataSourceResult<Car,Carviewmodel>(request,domain => Mapper.Map<Car,viewmodel>(domain));

...Kendo()
  .Grid<Carviewmodel>()
  .Name("gridCars")
  .Columns(columns =>
  {
     columns.Bound(c => c.Name);
     columns.Bound(c => c.IsActiveText);
  })
  .DataSource(dataSource => dataSource
     .Ajax()
     .Read(read => read.Action("ListGrid","CarsController"))
  )
  .Sortable()
  .Pageable(p => p.PageSizes(true))

好的,网格第一次完美地加载,但是当我通过IsActiveText进行过滤/排序时,我得到以下消息:

Invalid property or field – ‘IsActiveText’ for type: Car

在这种情况下最好的方法是什么?

解决方法

有些事情似乎很奇怪你告诉Kendo UI为Carviewmodel制作一个网格
.Grid<Carviewmodel>()

并告诉它有一个IsActive列:

columns.Bound(c => c.IsActive);

但Carviewmodel没有该名称的列:

public class Carviewmodel
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string IsActiveText { get; set; }
}

我的猜测是,Kendo正在从Carviewmodel IsActiveText传递字段名称,但是在服务器上运行ToDataSourceResult()来反对没有该名称属性的Car对象(一个IQueryable< Car>).映射发生在过滤&排序.

如果您希望在数据库中进行过滤和排序,那么在对数据库运行之前,您需要在IQueryable上调用.ToDataSourceResult().

如果您已经从DB中获取了所有的Car记录,那么您可以先通过做映射来解决这个问题,然后在IQueryable&Carviewmodel>上调用.ToDataSourceResult().

原文链接:https://www.f2er.com/csharp/96709.html

猜你在找的C#相关文章