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