1

我必须显示一个树视图。但这需要很多时间,这就是为什么我想按需加载这个树视图。首先我只想显示第一级,然后逐级重复。

这是视图

 $("#onflycheckboxes").jstree({
        json_data: {
            "ajax": {

                "url": function (node) {
                    var nodeId = "";
                    var url = ""
                    if (node == -1) {
                        url = "/TreeView/GetCollectionWS/source";
                    }
                    else {
                        nodeId = node.attr('id');
                        url = "/TreeView/GetCollectionWS/" + nodeId;
                    }

                    return url;
                },
                "type": "POST",
                "dataType": "json",
                "contentType": "application/json charset=utf-8"
            }
        },
        checkbox: {
            real_checkboxes: true,
            checked_parent_open: true
        },
        plugins: ["themes", "json_data", "ui", "checkbox"]
    });

这是控制器

public virtual ActionResult GetCollectionWS(string root)
    {


       int? nodeId = (root == source) ? (int?)null : Convert.ToInt32(root);
        Object[] liste = new Object[100];
        liste = DSClient.Views.Traitement.getTop(nodeId);
        List<TreeViewNode> nodes = new List<TreeViewNode>();
       for (int i = 0; (i < liste.Length && liste.ElementAt(i) != null);i++ )
        {
            bool leaf = false;
            nodes.Add(new TreeViewNode()
            {
                id = Convert.ToString(DSClient.Views.Traitement.GetNodeId(liste.ElementAt(i))),
                text = liste.ElementAt(i).Handle,
                classes = leaf ? "file" : "folder",
                hasChildren = !leaf
            });

        }
        return Json(nodes);
    }

当我在行上尝试断点时返回 Json(nodes); 我说节点首先包含{id=0,text=Collection-10,classes=folder,haChildren=false}

视图什么都没有显示。请,有人可以帮我吗?


  public virtual string GetCollectionWS(string id)
    {
       Object[] liste = new Object[100];
       client = new DSServiceClient();
       if (id == "source")
       {
           Collection[] _top = new Collection[100];
           client.Open();
           _top = client.GetTopCollections();
           client.Close();

           for (int i = 0; i < _top.Length; i++)
           {
               DSClient.Controllers.Object obji = new DSClient.Controllers.Object();
               obji.Handle = _top[i].Handle;
               obji.Name = _top[i].Title;
               liste[i] = obji;
           }

       }
       else
       {
           client = new DSServiceClient();
           client.Open();
           Tree tree = client.GetTreeView(id);
           client.Close();
           liste = tree.listObjects;
       }
       var recursiveObjects = FillRecursive(liste);
       string myjsonmodel = new JavaScriptSerializer().Serialize(recursiveObjects);
        return myjsonmodel;
    }

    private static List<RecursiveObject> FillRecursive(Object[] flatObjects)
    {
        List<RecursiveObject> recursiveObjects = new List<RecursiveObject>();

        for (int i = 0; (i < flatObjects.Length && flatObjects.ElementAt(i) != null); i++)
        {
            recursiveObjects.Add(new RecursiveObject()
            {
                data = flatObjects.ElementAt(i).Name,
                id = flatObjects.ElementAt(i).Handle,
                attr = new FlatTreeAttribute { id = flatObjects.ElementAt(i).Handle, selected = false },
                children = null,
                state = "closed"
            });
        }
        return recursiveObjects;
    }

现在我想将所选节点的文本和 ID 发送到我的控制器。

<script type="text/javascript">
var divId = [];
var divText = [];
$('#idjstree').value=function GetIDs() {
    divId = [];
    divText = [];
    $("#onflycheckboxes").jstree("get_checked", null, true).each
        (function () {
            divId.push(this.id);
            divText.push($(this).children('a').text());
        });
    return (divId);     
}</script

这是在视图中

 @:<div id="onflycheckboxes"></div>
         @:<input type="hidden" id="idjstree" name="idjstree" value="" />

但是当我在创建的帖子上做一个断点时,我总是得到 idjstree=""。但是函数 GetIDs() 是正确的。请问我能做什么?

4

0 回答 0