public void PopulateTree(string dir, FileSystemNodeViewModel node)
        {
            if (node.children == null)
            {
                node.children = new List<FileSystemNodeViewModel>();
            }

            DirectoryInfo directory = new DirectoryInfo(dir);

            foreach (DirectoryInfo subDirectory in directory.GetDirectories())
            {
                FileSystemNodeViewModel childNode = new FileSystemNodeViewModel();
                childNode.id = subDirectory.FullName;
                childNode.text = subDirectory.Name.ToString();
                childNode.type = "root";

                PopulateTree(subDirectory.FullName, childNode);
                node.children.Add(childNode);
            }

            foreach (FileInfo file in directory.GetFiles())
            {
                FileSystemNodeViewModel childNode = new FileSystemNodeViewModel();
                childNode.id = file.FullName;
                childNode.text = file.Name.ToString();
                childNode.type = "file";
                node.children.Add(childNode);
            }
        }
        public ActionResult PopulateData()
        {
            var dir = Server.MapPath(MainDirectory);

            var main = new DirectoryInfo(dir);

            var result = new List<FileSystemNodeViewModel>();

            foreach (var item in main.GetDirectories())
            {
                var node = new FileSystemNodeViewModel();
                node.text = item.Name;
                node.id = item.FullName;
                node.type = "root";
                PopulateTree(node.id, node);
                result.Add(node);
            }

            return Json(result, JsonRequestBehavior.AllowGet);
        }