KendoNET.DynamicLinq 通过 Dynamic Linq for .Net Core App(1.x ~ 3.x) 实现服务器分页、过滤、排序、分组和聚合到 Kendo UI。
没有任何
您必须将自定义ObjectToInferredTypesConverter
添加到JsonSerializerOptions
,因为System.Text.Json
现在没有将推断类型反序列化为对象属性,请参阅示例代码和参考。
将 KendoNET.DynamicLinq NuGet 包添加到您的项目中。
配置您的 Kendo 数据源以将其选项作为 JSON 发送。
parameterMap: function(options, type) {return JSON.stringify(options);}
配置数据源的schema
。
模式:{数据:“数据”,总计:“总计”,聚合:“聚合”,组:“组”,错误:“错误”}
完成的代码如下所示。
.....其他剑道网格代码.....dataSource: {schema:{data: "Data",total: "Total",aggregates: "Aggregates",groups: "Groups",errors: "Errors", ...},transport: {read: {url: '您的读取网址',dataType: 'json',contentType: 'application/json; charset=utf-8',type: 'POST'},create: {url: '您创建的 url',dataType: "json",contentType: 'application/json; charset=utf-8',type: 'POST'},parameterMap: function (data, operation) {return JSON.stringify(data);}},error: function(e) {console.log(e.errors); // 您的错误信息e.sender.cancelChanges();},pageSize: 20,serverPaging: true,serverFiltering: true,serverSorting: true,...}.....其他剑道网格代码.....
导入 KendoNET.DynamicLinq 命名空间。
使用ToDataSourceResult
扩展方法来应用分页、排序、过滤、分组和聚合。
使用 KendoNET.DynamicLinq[WebMethod]public static DataSourceResult Products(int take, intskip, IEnumerable<Sort> 排序, Filter 过滤器, IEnumerable<Aggregator> 聚合, IEnumerable<Group> groups){using (var Northwind = new Northwind()) {return Northwind.Products .OrderBy(p => p.ProductID) // EF 需要分页排序 .Select(p => new ProductViewModel // 使用视图模型避免将内部实体框架属性序列化为 JSON { ProductID = p.ProductID, ProductName = p.ProductName, UnitPrice = p.UnitPrice, UnitsInStock = p.UnitsInStock, Discontinued = p.Discontinued } ) .ToDataSourceResult(获取、跳过、排序、过滤、聚合、分组);}}
或来自 Kendo UI 请求
using KendoNET.DynamicLinq[HttpPost]public IActionResult Products([FromBody] DataSourceRequest requestModel){using (var Northwind = new Northwind()){return Northwind.Products .Select(p => new ProductViewModel // 使用视图模型避免序列化内部实体框架属性为 JSON { ProductID = p.ProductID, ProductName = p.ProductName, UnitPrice = p.UnitPrice, UnitsInStock = p.UnitsInStock, Discontinued = p.Discontinued }) .ToDataSourceResult(requestModel.Take, requestModel.Skip, requestModel.Sort, requestModel.Filter, requestModel.Aggregate, requestModel.Group);}}
当启用服务器端可过滤选项并应用包含DateTime
类型列的过滤条件的查询时,EntityFramework Core 将引发异常System.Data.SqlClient.SqlException (0x80131904): Conversion failed when converting date and/or time from character string
。该错误是由某些旧 EntityFramework Core 版本中的已知问题引起的。解决方法是将datetime
值添加到 DbContext 中的相关列。例如
公共类 MyContext : DbContext{protected override void OnModelCreating(ModelBuilder modelBuilder){.........modelBuilder.Entity<Member>().Property(x => x.UpdateTime).HasColumnType("datetime") ;........................}}
打开命令行控制台
切换到项目根目录(srcKendoNET.DynamicLinq)。
运行“dotnet 恢复”
运行“dotnet pack --configuration Release”
添加<repository type="git" url="https://github.com/linmasaki/KendoNET.DynamicLinq.git" />
打包 nupkg 的元数据,以在 Nuget 上显示存储库 URL
KendoNET.DynamicLinq 是对 Ali Sarkis 的 Kendo.DynamicLinq 的引用。
以下链接是Kendo UI在线文档(与此包相关),您可以参考。
Kendo UI 网格
剑道数据源
更多Kendo UI配置可以参考这里