【发布时间】:2015-09-02 20:17:17
【问题描述】:
我目前正在处理一个项目,我需要在其中创建一个包含用户选择的列的网格。这些列可以源自数据库上下文中的任意表。更糟糕的是,数据库由不同的软件管理,并且表和表字段可能会经常更改。在可预见的未来,这不会改变。
所以我不能只创建一个包含所有可能列的模型。相反,我使用dynamic 类型将数据交给视图。这对我添加到 Kendo Grid 的每个选项都非常有效 - 除了使其可编辑。为了使示例更易于理解,我省略了所有不相关的内容(例如 .Sortable() 或通过 Ajax 读取数据的方法)
ColumnData[] 是显示的所有列的数组,包含它们的类型和名称
@model ColumnData[]
@(Html.Kendo().Grid<dynamic>()
.Name("grid")
.Columns(columns =>
{
for (var i = 0; i < Model.Length; i++)
{
columns.Bound(Model[i].Type, Model[i].Name);
}
})
//.Editable(editable => editable.Mode(GridEditMode.InLine))
.DataSource(dataSource => dataSource
.Ajax()
)
)
这将按预期工作,直到我取消注释 .Editable 部分。然后它抛出一个异常:
System.InvalidOperationException: Templates can be used only with field access, property
access, single-dimension array index, or single-parameter custom indexer expressions
我的猜测是,它在某处使用了一个lamba 函数,它不能用于动态对象。我不知道如何解决这个问题。
【问题讨论】:
标签: c# asp.net kendo-ui kendo-grid dynamictype