c# - 为什么我的 KendoUI Grid Sort 不能在我的 ASP.NET Core 应用程序中?
问题描述
当我尝试对网格进行排序时,出现以下错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“对象”不包含“列名”的定义
在这个特定的设置中,我所做的是将所有数据库表列名返回到List
类型object
并将其返回到数据源。然后我创建了一个伪Id
列,我希望网格在其架构中使用它进行排序。但是,这没有什么区别,因为错误告诉我该对象似乎没有ColumnName
要排序的属性。
这是我的网格的代码。
<kendo-grid name="columnGrid">
<datasource type="DataSourceTagHelperType.Ajax" page-size="20" server-filtering="true" server-operation="true">
<transport>
<read url="/Core/ReadVesselColumns" />
</transport>
<schema>
<model id="Id">
<fields>
<field name="Id" editable="false" />
</fields>
</model>
</schema>
</datasource>
<pageable page-size="10" />
<filterable enabled="true" />
<sortable enabled="true" />
<scrollable enabled="true" />
<columns>
<column selectable="true" width="50" />
<column field="ColumnName" title="Column" />
<column field="ColumnType" title="Type" hidden="true" />
</columns>
</kendo-grid>
这是数据的操作:
public JsonResult ReadVesselColumns([DataSourceRequest]DataSourceRequest request)
{
//Access Entity Type
var entityType = _context.Model.FindEntityType("Hagland.Data.Vessel");
//Create a list to store the column names and types
var columns = new List<object>();
int colId = new int();
//Iterate over the results and populate list
foreach (var property in entityType.GetProperties())
{
columns.Add(new
{
Id = colId ++,
ColumnName = property.GetColumnName(),
ColumnType = property.GetColumnType()
});
};
//Return list
var result = columns.ToDataSourceResult(request);
return Json(result);
}
通常这不会成为问题,因为我将从数据库中提取结构化数据,但在这种情况下,我需要提取列名并将它们返回到网格以供选择。有什么我做错了吗?我需要重新设置我的列表吗?
解决方案
我发现问题是由于缺乏模型来支持它。我试图有点过于抽象,结果网格无法对数据进行排序。解决方案是创建一个模型来匹配我绑定到网格的数据,这样就可以对数据进行排序。
namespace MyProject.Data
{
public class PositionColumns
{
public int Id { get; set; }
public string ColumnName { get; set; }
public string ColumnType { get; set; }
}
}
作为使用模型的结果,列表类型也必须更改以适应它。因此,我将其更改List<object>
为List<ModelClass>
如下:
var columns = new List<PositionColumns>
{
new PositionColumns {Id = 1, ColumnName = "Some Name", ColumnType = "string" },
...
...
}
推荐阅读
- swift - 如何在不同情况下快速启用按钮?
- java - 如何在实体中正确使用映射以防止 Oracle 错误持续存在?
- ios - 包含特定字符时,UILabel 文本在 PDF 中重复
- node.js - Sequelize.js - 构建 SQL 查询而不执行它
- perl - Punycode... 使用 Perl
- java - 如何使用 AmazonSNSClient 在 Android 9 中避免应用程序崩溃?
- jquery - 将 tablesorter 表导出为 CSV 并替换特定列的内容
- android - 如何在 Recycler View 中使用不同的项目类型
- android-layout - HorizontalGridView 从靠背我想将项目保持在中心
- jquery - 无法更改背景图像:在 axios 之后 jquery 链接的 url