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

Mah*_*bar 5 c# telerik kendo-grid kendo-asp.net-mvc asp.net-mvc-5

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

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;}
}
Run Code Online (Sandbox Code Playgroud)

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

SL.No | Eatable | Sugar(KG) | Salt(gram) | Oil(L)
Run Code Online (Sandbox Code Playgroud)

如果糖成分id为2且盐成分id为4,我将可食用物列表传递给显示剑道列表的视图,我在下面的列绑定LINQ查询下获取成分的数量,如下所示.

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
Run Code Online (Sandbox Code Playgroud)

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

Ana*_*nis 1

正如评论中提到的,处理此问题的一种方法是扁平化模型,因为剑道网格被设计为处理扁平数据。假设我们将使用 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;}
}
Run Code Online (Sandbox Code Playgroud)

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

然而,根据此链接讨论网格的客户端模板,一种选择可能是执行以下操作

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

在模板内,您可以编写 Razor 语法,并执行许多操作,从而生成列可以绑定到的字符串输入。