private BlockJsonResponse LoadFromMetablock(TapestryDesignerMetablock parent, int level, string selectedBlockName)
        {
            BlockJsonResponse item = new BlockJsonResponse()
            {
                Name        = parent.Name,
                Value       = "",
                Selected    = false,
                IsMetablock = true,
                Level       = level,
                ChildBlocks = new List <BlockJsonResponse>()
            };

            foreach (TapestryDesignerBlock block in parent.Blocks.OrderBy(b => b.Name))
            {
                item.ChildBlocks.Add(new BlockJsonResponse()
                {
                    Name        = block.Name,
                    Value       = block.Name,
                    Selected    = block.Name == selectedBlockName,
                    IsMetablock = false,
                    Level       = level + 1,
                    ChildBlocks = null
                });
            }
            foreach (TapestryDesignerMetablock mBlock in parent.Metablocks.OrderBy(m => m.Name))
            {
                item.ChildBlocks.Add(LoadFromMetablock(mBlock, level + 1, selectedBlockName));
            }

            return(item);
        }
        public ActionResult LoadBlockList(int appId, string selectedBlockName)
        {
            DBEntities e = COREobject.i.Context;
            TapestryDesignerMetablock root = e.TapestryDesignerMetablocks.Where(b => b.ParentAppId == appId && b.ParentMetablock_Id == null).FirstOrDefault();

            BlockJsonResponse blockList = LoadFromMetablock(root, 0, selectedBlockName);

            return(Json(blockList));
        }