2017-01-02 176 views
0

我正在使用JSTree的MVC项目,我试图将子节点添加到树,但是我得到一个空的参考错误对象引用未设置为线上的对象的实例subGroupNode.children.Add(itemNode);我想这是因为subGroupNode.Children是空的。在之前的foreach循环中创建孩子的时候怎么会这样呢?JSTree添加节点到子节点

public JsonResult GetJsTree3Data() 
    { 
     var marketGroups = new List<JsTree3Node>(); 

     // Create our root node and ensure it is opened 
     var root = new JsTree3Node() 
     { 
      id = Guid.NewGuid().ToString(), 
      text = "Market Items", 
      state = new State(true, false, false) 
     }; 

     foreach (var group in GenerateGroups(connString)) 
     { 
      if (group.marketParentGroup == 0) 
      { 
       var node = JsTree3Node.NewNode(group.id_str); 
       node.text = group.name; 
       node.state = new State(false, false, false); 
       marketGroups.Add(node); 
      } 
     } 

     foreach (var marketGroup in marketGroups) 
     { 
      foreach (var subGroup in GenerateGroups(connString)) 
      { 
       if (subGroup.marketParentGroup.ToString() == marketGroup.id) 
       { 
        var childNodes = new List<JsTree3Node>(); 

        var childNode = new JsTree3Node(); 
        childNode.id = subGroup.id_str; 
        childNode.text = subGroup.name; 
        childNode.state = new State(false, false, false); 

        childNodes.Add(childNode); 

        var subGroupNode = new JsTree3Node(); 
        subGroupNode.id = subGroup.id_str; 
        subGroupNode.text = subGroup.name; 
        subGroupNode.state = new State(false, false, false); 
        subGroupNode.children = childNodes; 

        marketGroup.children.Add(subGroupNode); 
       } 
      } 
     } 

     return Json(root, JsonRequestBehavior.AllowGet); 
    } 

enter image description here

+0

我没有看到你加'children'属性'subGroupNode'对象 –

+0

感谢replyng尼古拉,我以为我是在添加行'subGroupNode.children.Add(itemNode)的subChildNode;' –

+0

因此,在使用'Add'方法(我相信数组方法)之前,您应该先创建该属性并在其中分配一个空数组?至少这是如何在JavaScript中工作。 –

回答

0

我创建第二个名单一样的第一和比较这两个清单解决问题。

public JsonResult GetJsTree3Data() 
    { 
     var marketGroups = new List<JsTree3Node>(); 
     var marketSubGroups = new List<JsTree3Node>(); 

     foreach (var group in GenerateGroups(connString)) 
     { 
      var node = JsTree3Node.NewNode(group.id_str); 
      node.text = group.name; 
      node.state = new State(false, false, false); 
      node.parentId = group.marketParentGroup; 
      marketSubGroups.Add(node); 
     } 

     // Create our root node and ensure it is opened 
     var root = new JsTree3Node() 
     { 
      id = Guid.NewGuid().ToString(), 
      text = "Market Items", 
      state = new State(true, false, false) 
     }; 

     foreach (var group in marketSubGroups) 
     { 
       var node = JsTree3Node.NewNode(group.id); 
       node.text = group.text; 
       node.state = new State(false, false, false); 
       marketGroups.Add(node); 
     } 

     foreach (var marketGroup in marketGroups) 
     { 
      foreach (var subGroup in marketSubGroups) 
      { 
       if (subGroup.parentId.ToString() == marketGroup.id) 
       { 
        var subGroupNode = new JsTree3Node(); 
        subGroupNode.id = subGroup.id; 
        subGroupNode.text = subGroup.text; 
        subGroupNode.state = new State(false, false, false); 
        marketGroup.children.Add(subGroupNode); 
       } 
      } 
     } 

     root.children = marketGroups; 

     return Json(root, JsonRequestBehavior.AllowGet); 
    }