Asp.net mvc 从远程数据加载父节点和子节点

Asp.net mvc 从远程数据加载父节点和子节点,asp.net-mvc,kendo-ui,kendo-treeview,Asp.net Mvc,Kendo Ui,Kendo Treeview,我的控制器中有一个方法,它返回一个我用正确的层次结构填充的List()。这似乎可以正确地序列化,但当我加载Treeview时,我没有任何层次结构,只有第一级节点 例如: 上面的每一个课程都有2/3的场景,我已经验证过,当从课程=>TreeViewItemModel开始时,这些场景会作为项目添加到基础对象中 控制器: public JsonResult GetAvailableCurricula(string LocationId) { LocationId = "1"; if(

我的控制器中有一个方法,它返回一个我用正确的层次结构填充的
List()
。这似乎可以正确地序列化,但当我加载Treeview时,我没有任何层次结构,只有第一级节点

例如:

上面的每一个课程都有2/3的场景,我已经验证过,当从课程=>TreeViewItemModel开始时,这些场景会作为项目添加到基础对象中

控制器:

public JsonResult GetAvailableCurricula(string LocationId)
{
    LocationId = "1";
    if(LocationId != string.Empty)
    {
        var results = Logic.GetFilteredCurriculum().Select(c => CurriculumToTreeView(c));
        return Json(results, JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(new List<TreeViewItemModel>(),JsonRequestBehavior.AllowGet);
    }
}

private TreeViewItemModel CurriculumToTreeView(CurriculumModel c)
{
    var tree = new TreeViewItemModel()
    {
        Id = c.CurriculumId.ToString(),
        Text = c.CurriculumName,
        HasChildren = c.Scenarios.Any()
    };

    if (tree.HasChildren)
    {
        tree.Items = c.Scenarios.Select(scenario =>
            new TreeViewItemModel()
            {
                Text = scenario.Name,      
            }
        ).ToList();    
    }
    return tree;
}
我是否需要采取一些额外的步骤来绑定子对象和父对象,而不是一次只绑定一个级别?我有一个相当小的数据集,我不需要经常重新加载,所以我希望避免单独/按需加载每个级别

如果有帮助的话,下面是我从控制器为我的课程之一发送的原始JSON:

{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Operator B","SpriteCssClass":null,"Id":"1","Url":null,"ImageUrl":null,"HasChildren":true,"Checked":false,"Items":[{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"test 2","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}},{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Scenario II","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}}],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}}

我相信Treeview的远程数据选项使用ajax来加载子数据,可以按需加载,也可以在初始加载时加载—由
LoadOnDemand
控制


剑道文档中的角色就是这样的。这就是我在上实现它的方式。完整的代码示例包括一个树视图和一个网格。

树视图采用分层数据源。序列化数据是什么样子的?我将向Treeview返回一个List(),并在我的CoursulumToTreeView方法中手动设置层次结构。我有另一个使用这些对象的页面,它工作得很好。唯一的区别是页面使用从ViewBag检索的本地数据,而此页面使用远程数据。如果有帮助的话,我会将原始JSON添加到我的帖子中。如果直接调用
TraineAssignments\GetAvailableCurricula
,你会得到数据吗?是的,我就是这样得到我上面发布的原始JSON字符串的。我尝试将LoadOnDemand(false)添加到我的树视图中,看起来没有任何更改,只显示父对象。因为我的对象是不同的类型、课程和场景,而不是像Kendo的例子中那样的所有员工,如果我不能在一开始加载整个层次结构,是否有办法至少为子对象使用不同的加载方法?我知道远程数据可以通过函数加载,这反过来会进行适当的ajax调用。我会看看我是否能想出一些例子(或者你也可以在这个方向上做一些实验)。
{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Operator B","SpriteCssClass":null,"Id":"1","Url":null,"ImageUrl":null,"HasChildren":true,"Checked":false,"Items":[{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"test 2","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}},{"Enabled":true,"Expanded":false,"Encoded":true,"Selected":false,"Text":"Scenario II","SpriteCssClass":null,"Id":null,"Url":null,"ImageUrl":null,"HasChildren":false,"Checked":false,"Items":[],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}}],"HtmlAttributes":{},"ImageHtmlAttributes":{},"LinkHtmlAttributes":{}}