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":{}}