c# - 从 C# MVC Controller 加载 EXT JS 树面板

标签 c# javascript asp.net-mvc extjs

我很幸运地使用 C# MVC 2 和 3 填充 EXT JS 组合框和列表框,但现在我正在尝试解决加载 EXT JS 树面板的问题。到目前为止,我无法从 Controller 上放置的任何内容加载树。

现在我正在尝试简单地从 Controller 返回静态数据,例如:

 public  ActionResult TreeFill()
        {
            var stuff = "[{ text: Type1, id: 100, leaf: false, cls: 'folder', children: [{ text: 'Client 1', id: 1, leaf: true, cls: 'file' },{ text: 'Client 2', id: 2, leaf: true, cls: 'file' },{ text: 'Client 3', id: 3, leaf: true, cls: 'file' },{ text: 'Client 4', id: 4, leaf: true, cls: 'file' }]}";

            return Json(new {stuff},JsonRequestBehavior.AllowGet);
        }

...我显然在这方面遇到了麻烦,但这是一个起点(从某种意义上说,不起作用的东西通常会导致起作用的东西)。我现在意识到我什至没有从 Controller 加载树的良好起点。我的想法是,我需要从数据库返回原始数据,并通过循环将其全部格式化为“Json”类型可以使用的格式。我在网上没有找到很多关于这个主题的信息,因此任何人都可以提供的指导将不胜感激。如果我有任何成功,我会在这里跟进。谢谢!

最佳答案

这是我用来加载扩展树的一些 JavaScript - 我知道这不是 100% 你正在做的事情,但希望它有帮助:

tree.setRootNode(new Ext.tree.AsyncTreeNode({ id: 0, text: "Subjects", expandable: false, expanded: true }));
loadTree(function(d) {
    tree.setRootNode(new Ext.tree.AsyncTreeNode({ id: 0, text: "Subjects", children: d, expandable: false, expanded: true }));
});

function loadTree(callback) {
    runAjax("MyServiceBlahBlahBlah.asmx/Foo", "{ItemType:" + ItemType + "}",
        function(data) {
            cleanTree(data.d);
            callback(data.d);
        });
}

//hmmm - cleanTree isn't a good name for this function, not sure what I was thinking when I named it...
function cleanTree(data, expand) {
    for (var i = 0; i < data.length; i++) {
        data[i].checked = false;
        if (expand) data[i].expanded = true;

        cleanTree(data[i].children, expand);
    }
}

这是我用来构建 JSON 的一些 C#。很抱歉把厨房水槽扔给你 - 再次,希望其中一些能帮助你:)

顺便说一句 - 我使用过一些不同的 Web 小部件工具包,而 EXT 是迄今为止我最喜欢的 - 非常好的选择!

    public static object GetSubjectHierarchyJSON(Func<vwHierarchicalSubject, bool> InitialPredicate, HierarchicalSubjectDAO DAO, int ItemType) {
        List<LINQLayer.vwHierarchicalSubject> TempSource = DAO.GetAll(DAO.UserID, ItemType).
            OrderBy(V => V.ParentSubjectName).ThenBy(V => V.LevelNumber).ThenBy(V => V.SubjectName).ToList();

        var result = new List<object>();

        foreach (vwHierarchicalSubject V in TempSource.Where(InitialPredicate).OrderBy(v => v.SubjectName))
            result.Add(BuildJSON(V, TempSource));

        return result;
    }

    private static object BuildJSON(vwHierarchicalSubject V, List<vwHierarchicalSubject> TempSource) {
        IEnumerable<vwHierarchicalSubject> Children =
            TempSource.Where(x => x.ParentID.HasValue && x.ParentID.Value == V.id).OrderBy(v => v.SubjectName);

        int id = V.id;
        string subText = V.SubjectName.Replace("&", "&amp;");

        if (Children.Count() == 0)
            return new { id = V.id, text = subText, children = new List<object>(), expanded = true };
        else {
            var result = new { id = V.id, text = subText, children = new List<object>() };
            foreach (vwHierarchicalSubject vElement in Children)
                result.children.Add(BuildJSON(vElement, TempSource));
            return result;
        }
    }

关于c# - 从 C# MVC Controller 加载 EXT JS 树面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420124/

相关文章:

C# 属性网格字符串编辑器

javascript - 是否可以在 Promise 执行器函数中设置 `this` 的值?

javascript - 更改图像内的对象颜色

c# - 并行执行存储过程

c# - 日期的正则表达式不起作用; MVC3 数据注解

c# - 在 ASP.NET MVC Core 中显示/编辑货币,为什么这么复杂?

javascript - 如何将 Latex 转换为 mathml

jquery - 如何在使用 ajax 和 JQuery 时加密发布数据?

c# - 如何在 mvc 中提交操作时获取所有 ListBox 项目(不仅是选定的项目)

c# - 如何订购 2 个不同的列表?