2017-01-02 3 views
0

Ich benutze JSTree mit einem MVC-Projekt und ich versuche, Kindknoten zum Baum hinzuzufügen, aber ich bekomme einen Nullreferenzenzfehler Objektreferenz nicht auf eine Instanz eines Objekts in der Zeile festgelegt subGroupNode.children.Add(itemNode); Ich denke, das ist, weil die subGroupNode.Children leer ist. Wie kann es sein, wenn das Kind in der vorherigen foreach-Schleife erstellt wird.JSTree Hinzufügen von Knoten zu Kindknoten

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

Ich sehe nicht, wo Sie 'children' Eigenschaft in dem' subGroupNode' –

+0

Dank Objekt für replyng Nikolay, ich dachte, dass ich die subChildNode in der Linie wurde das Hinzufügen 'subGroupNode.children.Add (itemNode);' –

+0

Also sollten Sie diese Eigenschaft nicht erstellen und zuerst ein leeres Array zuweisen, bevor Sie die Methode 'Add' verwenden (was ich glaube, eine Array-Methode)? Zumindest würde dies in Javascript funktionieren. –

Antwort

0

löste ich das Problem, indem eine zweite Liste die gleiche wie die erste Erstellung und die beiden Listen zu vergleichen.

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); 
    } 
Verwandte Themen