使用Ajax延迟加载jsTree - 怎么做?

时间:2014-12-23 09:03:15

标签: ajax asp.net-mvc-4 jstree

我正在开发一个小型文件管理系统。它用于复制文件系统,因此它会在您选择的驱动器或文件夹上显示文件和文件夹。 此外,它使用jsTree ver 3来显示系统。由于有数百万个文件/文件夹,我想动态加载每个文件/文件夹,一次一个。 这就是我在jsTree中所拥有的:

> function RedrawDirectories() {
>     $('#DestinationTree').jstree({
>         'core': {
>             "animation": 0,
>             "expand_selected_onload": false
>         },
> 
>         "json_data": {
>             "ajax": {
>                 "url": function (node) {
>                     return node.id === '#' ? 'Home/GetRootNode' : 'Home/GetSpecificNode?nodeId=' + node.id;
>                 },
>                 
>                 "type": "GET",
>                 "dataType": "json",
>                 "contentType": "application/json charset=utf-8"
>             }
>         },

等。 所以,如果我在根,我调用形成根链接的函数,对于任何其他节点函数,调用带参数的GetSpecificNode。

以下是我在后端的控件:

[HttpGet]
public JsonResult GetRootNode() 
{
    JsTreeModel rootNode = new JsTreeModel();
    rootNode.attr = new JsTreeAttribute();
    rootNode.attr.rel = "root";
    rootNode.data = ConfigurationManager.AppSettings["StorageDrive"];
    rootNode.attr.id = ConfigurationManager.AppSettings["StorageDrive"];
    rootNode.state = "open root folder";

    return Json(rootNode, JsonRequestBehavior.AllowGet); 
}
    [HttpGet]
    public JsonResult GetSpecificNode(string nodeId) 
    {
        JsTreeModel specificNode = new JsTreeModel();
        specificNode.attr = new JsTreeAttribute();
        specificNode.attr.rel = "folder";
        specificNode.state = "open folder";

        return Json(specificNode, JsonRequestBehavior.AllowGet);
    }

显然,我需要为下面的根节点和特定节点添加子节点。 我使用以下类结构来表示后端的节点:

> using System; using System.Collections.Generic; using System.Linq;
> using System.Web;
> 
> 
> public class JsTreeModel {
>     public string data;
>     public JsTreeAttribute attr;
>     public string state;
>     public List<JsTreeModel> children;
>      }
> 
> public class JsTreeAttribute {
>     public string id;
>     public string rel; }

Firebug中显示以下错误

"NetworkError: 404 Not Found - http://localhost:56357/Home/Home/GetSpecificNode?nodeId=undefined"

2 个答案:

答案 0 :(得分:0)

您需要提供参数名称,如下所示

public JsonResult GetSpecificNode(string id) {
// Block of code
}

答案 1 :(得分:0)

public JsonResult GetSpecificNode(string nodeId) 
    {
        JsTreeModel specificNode = new JsTreeModel();
        specificNode.attr = new JsTreeAttribute();
        specificNode.attr.rel = "folder";
        specificNode.state = "open folder";
        specificNode.attr.id = nodeid; //add this row

        return Json(specificNode, JsonRequestBehavior.AllowGet);
    }

很抱歉重温此主题,但对于复制此代码的任何人来说,错误是设置节点的attr.id失败。