KendoUI树视图:远程数据问题

时间:2012-12-16 16:36:09

标签: c# javascript asp.net-mvc razor kendo-treeview

我有一个KendoTreeview。我正在使用MVC4和最新的KendoUI。 我也在使用sql server和C#

假设我有一个名为“MyDB”的数据库和该数据库中名为“Products”的单个表。

表“产品”: ID - int - pk 名称 - nvarchar(50) 父 - int - FK

我希望产品有子产品......

好的,现在我在控制器中:

 public JsonResult ProductsForTreeView(int? id)
    {
         var dataContext = new ProductsDBContext();
         var products = from e in dataContext.Products
               where (  id.HasValue ? e.Parent == id : e.Parent == 0) 
               select new
                          {
                              id = e.Id,
                              Name = e.Name,
                              hasChildren = e.Id
                          };

 return Json(products , JsonRequestBehavior.AllowGet);
    }

观点:

@(Html.Kendo().TreeView()
      .Name("treeview")
      .DataTextField("Name")
      .HighlightPath(true)
      .DataSource(dataSource => dataSource
                                    .Read(read => read
                                                      .Action("ProductsForTreeView", "SiteMap")
                                    )
      )
    )

这可以正常显示树视图(几乎没有!),只是树视图在每个节点旁边显示+,无论它是否有子节点。

要么我需要修改我的LINQ,要么甚至可以使用一些JavaScript删除没有子元素的“+”...

“+”的班级名称是“k-icon k-plus”。

如何阻止树视图将“+”附加到每个节点?它只应显示给有子节点的节点。

1 个答案:

答案 0 :(得分:0)

我认为问题在于您返回 JSON 。如果 .hasChildren 属性设置为 true ,它会添加展开('+')图标。

因此,您的 .hasChildren 属性应该具有一个布尔值,该值仅在该节点具有子/子项时才显示为。在您的情况下,您使用 e.Id ,我认为这不是布尔值。

试试这个:

hasChildren = e.Products.Any()

或查看他们的文档。 http://demos.kendoui.com/web/treeview/remote-data.html

希望这有帮助。