微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/csharp/96709.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐