如何将嵌套的模型属性绑定到kendo网格列?

时间:2017-04-27 18:43:25

标签: c# asp.net-mvc-5 telerik kendo-grid kendo-asp.net-mvc

我有一个模型,其中包含另一个模型的数据类型列表的属性,如下所示。

public class Eatables
{
 int id {get;set;}
 string name{get;set;}
 List<Ingredient> ingredientList{get;set;}
}

public class Ingredient
{
 int id {get;set;}
 quantity {get;set;}
 calories {get;set;}
}

如果我想根据剑道标题下方显示所需食材的食物清单。

SL.No | Eatable | Sugar(KG) | Salt(gram) | Oil(L)

如果糖成分id为2且盐成分id为4,我将食堂列表传递给显示kendo列表的视图,我在下面的列绑定LINQ查询下获取成分的数量,如下所示。 / p>

columns.Bound(x => x.ingredientList.Find(x=>x.id=="2").quantity) -- to fetch sugar quantity
columns.Bound(x => x.ingredientList.Find(x=>x.id=="4").quantity) -- to fetch salt quantity

但是上述查询并未获取数量,尽管这些值在从控制器发送的模型中可用。 请建议如果我错过了任何查询,那么有一天我会在迷宫中解决问题。

1 个答案:

答案 0 :(得分:0)

正如注释中所提到的那样,由于kendo网格被设计为work with flat data,因此处理该问题的一种方法是将模型展平。 假设我们将使用ViewModel EatableSSOVM

public class EatableSSOViewModel
{
   public int id {get;set;}
   public string name{get;set;}
   public string sugar {get; set;}
   public string salt{get; set;}
   public string oil{get; set;}
}

使用LINQ映射查询糖,盐和油的值,并将网格绑定到List<EatableSSOViewModel>

然而,根据link,它讨论了网格的客户端模板,一种选择可能是做类似以下的事情

columns.Template( @<text>
     @item.ingredientList.Find(x=>x.id=="2").quantity
    </text>
);

在模板中,您可以编写Razor语法,并且几乎可以做很多事情,这些事情会导致该列可以绑定到的字符串输入。