Telerik mvc grid,columns.bound to dictionary value。或"模型中的动态属性"

时间:2015-06-04 17:24:40

标签: asp.net-mvc telerik-mvc

我有一个具有动态&#34;属性的模型&#34; (在DB级别,类似于Entity-Attribute-Value系统)。 这些属性位于Dictionary<int, string>字段中,并希望将它们显示在列中。

型号:

该模型具有静态数组(在静态反演器中初始化)&#34;属性&#34;姓名&amp;键:

 public static ModelSpecialParameter[] SpecialFields;

和一个字典(在模型创建中初始化,并添加了所有可用的键)及其值。

public Dictionary<int, string> ValuesForDynamicProps;

视图

@(Html.Kendo().Grid(Model)
.Name("grid")
.Columns(columns =>
{
    //other columns for realy propertry
    //columns.Bound(e => ...
    //columns.Bound(e => ...

    foreach (var  item in SpecialFields) // SpecialFields is a static collection. represent the name an id of the dynamic property's.
    {
        columns.Bound("ValuesForDynamicProps[" + item.IdProperty + "]").Width(140).Title(item.DisplayName);
    }
}

我收到错误:

  

{&#34;绑定列需要字段或属性访问表达式。&#34;}

我也尝试了:

columns.Bound(e => e.ValuesForDynamicProps[item.IdProperty]).Width(140).Title(item.DisplayName);

同样的错误。

即使我想要的东西不可能,我也在寻找如何获得理想结果的想法: 添加和删​​除属性的灵活性。

2 个答案:

答案 0 :(得分:1)

直接使用Fluent API并不是一种简单的方法。您需要做的是从另一个方法调用ajax,该方法将返回带有结构化数据的JSON。

或者尝试另一种方式,这与你尝试的几乎相同。也许可以帮到你: https://mycodepad.wordpress.com/2014/12/01/asp-net-mvc-5-with-razor-kendo-ui-dynamic-grid-creation-columns-ordering-grouping-and-paging/

答案 1 :(得分:0)

据我所知,你有问题:

columns.Bound(e => ValuesForDynamicProps[item.IdProperty]).Width(140).Title(item.DisplayName);

您传递给Bound()方法lambda但不使用其参数(模型)。 应该有一些像:

columns.Bound(e => e.ValuesForDynamicProps[item.IdProperty]).Width(140).Title(item.DisplayName);