gpt4 book ai didi

c# - 如何在扩展 Kendo Treeview 上加载子节点

转载 作者:行者123 更新时间:2023-12-03 22:52:23 30 4
gpt4 key购买 nike

我想创建一个 treeviewnodes来自我电脑上的文件夹和文件。用户可以dragdrop nodes .

我的设计 View (cshtml):

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

我的 Controller :
public class HomeController : Controller
{
public ActionResult TreeView()
{
ViewBag.ParentNode = GetDefaultNode();
return View();
}
private IEnumerable<TreeViewItemModel> GetDefaultNode()
{
List<TreeViewItemModel> defaultNode = new List<TreeViewItemModel>();
string[] drivers = Directory.GetLogicalDrives();
for (int i = 0; i < drivers.Length; i++)
{
TreeViewItemModel node = new TreeViewItemModel();
node.Text = drivers[i];
node.Url = drivers[i];
defaultNode.Add(node);
GetChildNode(node);
}

return defaultNode;
}
private void GetChildNode(TreeViewItemModel item)
{
if (Directory.Exists(item.Text))
{
try
{
string[] dirNodes = Directory.GetDirectories(item.Text);
if (dirNodes.Length > 0)
{
for (int i = 0; i < dirNodes.Length; i++)
{
TreeViewItemModel child = new TreeViewItemModel();
DirectoryInfo dirInfo = new DirectoryInfo(dirNodes[i]);
child.Text = dirInfo.Name;
child.Url = dirInfo.FullName;
child.HasChildren = true;
item.Items.Add(child);
child.Items.Add(new TreeViewItemModel());
}
}
string[] fileNodes = Directory.GetFiles(item.Text);
if (fileNodes.Length > 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和根的 child node .

我希望在用户扩展根目录 node 上加载子节点.所以我声明事件 onExpandtreeview ,但我不知道如何将当前展开节点传递给 Controller ​​,并获取 nodes 的列表在 View 中,之后将其插入到当前展开节点。
我在这个页面和谷歌上搜索了很多,但找不到解决我问题的方法。

ps:对不起,我的英文不好,希望你能理解我的意思。

更新:

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

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

我的 Controller :
        public JsonResult GetRoot()
{
return Json(GetDefaultNode(), JsonRequestBehavior.AllowGet);
}
private IEnumerable<TreeViewItemModel> GetDefaultNode()
{
List<TreeViewItemModel> defaultNode = new List<TreeViewItemModel>();
string[] drivers = Directory.GetLogicalDrives();
for (int i = 0; i < drivers.Length; i++)
{
TreeViewItemModel node = new TreeViewItemModel();
node.Text = drivers[i];
node.Url = drivers[i];
defaultNode.Add(node);
GetChildNode(node);
}

return defaultNode;
}
private void GetChildNode(TreeViewItemModel item)
{
if (Directory.Exists(item.Text))
{
try
{
string[] dirNodes = Directory.GetDirectories(item.Text);
if (dirNodes.Length > 0)
{
for (int i = 0; i < dirNodes.Length; i++)
{
TreeViewItemModel child = new TreeViewItemModel();
DirectoryInfo dirInfo = new DirectoryInfo(dirNodes[i]);
child.Text = dirInfo.Name;
child.Url = dirInfo.FullName;
item.Items.Add(child);
}
}
string[] fileNodes = Directory.GetFiles(item.Text);
if (fileNodes.Length > 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 { }

}
}

这是结果:

enter image description here

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

enter image description here

最佳答案

问题解决了。使用远程数据绑定(bind)时,节点仅加载在同一级别。当 onExpand 触发时,它会再次调用方法 GetNodes。

 public JsonResult GetNodes(string id)
{
List<Node> node = new List<Node>();
List<string> drivers=new List<string>();
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);
}

关于c# - 如何在扩展 Kendo Treeview 上加载子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861498/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com