如何在扩展剑道树视图上加载子节点

我想在PC上创建一个包含文件夹和文件nodestreeview 。 用户可以drag nodes

我的设计视图(cshtml):

 @( Html.Kendo().TreeView() .Name("treeview") .Events(ev=>ev.Expand("onExpand")) .BindTo((IEnumerable)ViewBag.ParentNode) ) 

我的控制器:

 public class HomeController : Controller { public ActionResult TreeView() { ViewBag.ParentNode = GetDefaultNode(); return View(); } private IEnumerable GetDefaultNode() { List defaultNode = new List(); string[] drivers = Directory.GetLogicalDrives(); for (int i = 0; i  0) { for (int i = 0; i  0) { for (int f = 0; f < fileNodes.Length; f++) { TreeViewItemModel child = new TreeViewItemModel(); FileInfo fileInfo = new FileInfo(fileNodes[f]); child.Text = fileInfo.Name; child.Url = fileInfo.FullName; child.HasChildren = true; item.Items.Add(child); } } } catch { } } } } 

它显示根节点的node和子node

我想在用户扩展根节点上加载子node 。 所以我在treeview声明了事件onExpand ,但是我不知道如何将当前的扩展节点传递给控制器​​,并获取视图上的nodes列表,然后将其插入当前的扩展节点。 我在这个页面和谷歌搜索了很多,但找不到解决我的问题的方法。

ps:抱歉,因为我的英语不好,希望你能理解我的意思。

更新:

我改为使用绑定到远程日期,但我仍然没有解决我的问题。

我的cshtml:

  @(Html.Kendo().TreeView() .Name("treeview") .DataTextField("Text") .DataUrlField("Url") .DataSource(dataSource => dataSource .Read(read => read .Action("GetRoot", "Home") ) ) ) 

我的控制器:

  public JsonResult GetRoot() { return Json(GetDefaultNode(), JsonRequestBehavior.AllowGet); } private IEnumerable GetDefaultNode() { List defaultNode = new List(); string[] drivers = Directory.GetLogicalDrives(); for (int i = 0; i  0) { for (int i = 0; i  0) { for (int f = 0; f < fileNodes.Length; f++) { TreeViewItemModel child = new TreeViewItemModel(); FileInfo fileInfo = new FileInfo(fileNodes[f]); child.Text = fileInfo.Name; child.Url = fileInfo.FullName; item.Items.Add(child); } } } catch { } } } 

这是结果:

在此处输入图像描述

如您所见,它只显示没有child nodes根节点。当我调试时,根节点包含child nodes

在此处输入图像描述

问题解决了。 使用远程数据绑定时,节点只加载在同一级别上。当onExpand fire时,它将再次调用方法GetNodes。

  public JsonResult GetNodes(string id) { List node = new List(); List drivers=new List(); if (string.IsNullOrEmpty(id)) { drivers.AddRange(Directory.GetLogicalDrives()); } else { if(Directory.Exists(id)) drivers.AddRange(Directory.GetDirectories(id)); } try { for (int i = 0; i < drivers.Count; i++) { Node item = new Node(); DirectoryInfo dirInfo = new DirectoryInfo(drivers[i]); item.id = dirInfo.FullName; item.Name = dirInfo.Name; item.hasChildren = HasNodes(drivers[i]); node.Add(item); } } catch { } return Json(node, JsonRequestBehavior.AllowGet); }