加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:42:11 所属栏目:百科 来源:网络整理
导读:使用以下类加载/过滤/订购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
使用以下类加载/过滤/订购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().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读