Asp.net mvc 带Kendo treeview的MVC-远程数据JSON或XML
我正在尝试创建一个从我的控制器(PropertyController)填充的剑道树视图 我陷入困境的部分是如何在控制器中格式化数据。我如何创建一个三个项目的树状视图,并将其传递给我的视图以显示在树状视图中Asp.net mvc 带Kendo treeview的MVC-远程数据JSON或XML,asp.net-mvc,asp.net-mvc-4,treeview,kendo-ui,Asp.net Mvc,Asp.net Mvc 4,Treeview,Kendo Ui,我正在尝试创建一个从我的控制器(PropertyController)填充的剑道树视图 我陷入困境的部分是如何在控制器中格式化数据。我如何创建一个三个项目的树状视图,并将其传递给我的视图以显示在树状视图中 @(Html.Kendo().TreeView() .Name("treeview") .Events(events => events .Dr
@(Html.Kendo().TreeView()
.Name("treeview")
.Events(events => events
.DragStart("PartnershipPage.OnDragStart")
.Drop("PartnershipPage.OnDrop")
.DragEnd("PartnershipPage.OnDragEnd")
)
.HighlightPath(true)
.DragAndDrop(true)
.DataSource(dataSource => dataSource
.Read(read => read
.Action("Index","Tree")
)
)
)
我已经包括了控制器,看看我是否做得正确。到目前为止所发生的只是JSON在屏幕上显示为文本
控制器:
public ActionResult Index()
{
var org = new Entities();
var eList = new List<Entity>();
var entity1 = new Entity
{
Id = 1,
Name = "LLC-A",
parentId = 0
};
eList.Add(entity1);
var entity2 = new Entity
{
Id = 2,
Name = "LLC-B",
parentId = 0
};
eList.Add(entity2);
var entity3 = new Entity
{
Id = 1,
Name = "LLC-C",
parentId = 2
};
eList.Add(entity3);
var entity4 = new Entity
{
Id = 1,
Name = "LLC-D",
parentId = 2
};
eList.Add(entity4);
org.Entity = eList;
var test = from x in org.Entity
where (x.Name != null)
select new
{
Id = x.Id,
Name = x.Name,
parentId = x.parentId
};
;
return Json(test, JsonRequestBehavior.AllowGet);
}
public JsonResult EntitiesForTreeView(int? id)
{
// Here I am using EntityFramework
var entitiesContext = new EntityDBContext();
var myEntity= from e in entitiesContext.Entities
where (id.HasValue ? e.Parent == id : e.Parent == null)
select new
{
id = e.Id,
Name = e.Name,
hasChildren = e.Id
};
return Json(myEntity, JsonRequestBehavior.AllowGet);
}
public ActionResult Index()
{
var org=新实体();
var eList=新列表();
var entity1=新实体
{
Id=1,
Name=“LLC-A”,
parentId=0
};
添加列表(实体1);
var entity2=新实体
{
Id=2,
Name=“LLC-B”,
parentId=0
};
添加列表(实体2);
var entity3=新实体
{
Id=1,
Name=“LLC-C”,
parentId=2
};
添加列表(实体3);
var entity4=新实体
{
Id=1,
Name=“LLC-D”,
parentId=2
};
添加列表(实体4);
org.Entity=eList;
var测试=来自组织实体中的x
其中(x.Name!=null)
选择新的
{
Id=x.Id,
Name=x.Name,
parentId=x.parentId
};
;
返回Json(test,JsonRequestBehavior.AllowGet);
}
来自:
映射
.For(绑定=>绑定
.Children(c=>c.Orders)//子项将绑定到“Orders”属性
.ItemDataBound((item,c)=>item.Text=c.ContactName)//将“Customer”属性映射到TreeItem属性
)
.For null)/“Orders”没有子对象,因此返回“null”
.ItemDataBound((item,o)=>item.Text=o.OrderID.ToString())//将“Order”属性映射到TreeViewItem属性
)
)
%>
来自:
映射
.For(绑定=>绑定
.Children(c=>c.Orders)//子项将绑定到“Orders”属性
.ItemDataBound((item,c)=>item.Text=c.ContactName)//将“Customer”属性映射到TreeItem属性
)
.For null)/“Orders”没有子对象,因此返回“null”
.ItemDataBound((item,o)=>item.Text=o.OrderID.ToString())//将“Order”属性映射到TreeViewItem属性
)
)
%>
您可以将实体放入一个名为“myEntities”的列表中,并将其从控制器返回到视图:
public ActionResult Index()
{
var ents = getMyEntities(); // some method you have to return the list of your entities
return ents;
}
然后在视图中,可以循环浏览模型中的所有实体:
@(Html.Kendo().TreeView()
.Name("TreeView")
.Items(treeview =>
{
foreach (var entity in Model)
{
var entityName = entity.Name;
var children = entity.Children;
treeview.Add().Text(entityName ).Expanded(false).Items(branch =>
{
if (children != null)
{
foreach (var child in children)
{
branch.Add().Text(child);
}
}
});
}
}
)
)
我使用children是因为我发现它比parent更容易使用,所以我会将我的实体更改为如下内容:
var entity4 = new Entity
{
Id = 1,
Name = "LLC-D",
Children = <list of children names ... >
};
以及以下观点:
@(Html.Kendo().TreeView()
.Name("treeview")
.DataTextField("Name")
.LoadOnDemand(true)
.HighlightPath(true)
.DataSource(dataSource => dataSource
.Read(read => read
.Action("EntitiesForTreeView", "SiteMap")
)
)
.Checkboxes(true)
)
希望这有帮助。抱歉,如果有什么愚蠢的事情-我只做了3个月的网页开发,所以如果需要的话,取消标记为答案。如果我能进一步提供帮助,请告诉我。PS:我应该提到,在实现了上面所示的解决方案之后,我注意到我树上的节点都有“+”符号。。。不管他们是否有孩子。如果您知道如何解决此问题,请告诉我:)您可以将您的实体放入一个名为“myEntities”的列表中,并将其从控制器返回到视图:
public ActionResult Index()
{
var ents = getMyEntities(); // some method you have to return the list of your entities
return ents;
}
然后在视图中,可以循环浏览模型中的所有实体:
@(Html.Kendo().TreeView()
.Name("TreeView")
.Items(treeview =>
{
foreach (var entity in Model)
{
var entityName = entity.Name;
var children = entity.Children;
treeview.Add().Text(entityName ).Expanded(false).Items(branch =>
{
if (children != null)
{
foreach (var child in children)
{
branch.Add().Text(child);
}
}
});
}
}
)
)
我使用children是因为我发现它比parent更容易使用,所以我会将我的实体更改为如下内容:
var entity4 = new Entity
{
Id = 1,
Name = "LLC-D",
Children = <list of children names ... >
};
以及以下观点:
@(Html.Kendo().TreeView()
.Name("treeview")
.DataTextField("Name")
.LoadOnDemand(true)
.HighlightPath(true)
.DataSource(dataSource => dataSource
.Read(read => read
.Action("EntitiesForTreeView", "SiteMap")
)
)
.Checkboxes(true)
)
希望这有帮助。抱歉,如果有什么愚蠢的事情-我只做了3个月的网页开发,所以如果需要的话,取消标记为答案。如果我能进一步提供帮助,请告诉我。PS:我应该提到,在实现了上面所示的解决方案之后,我注意到我树上的节点都有“+”符号。。。不管他们是否有孩子。如果你知道如何解决这个问题,请告诉我:)从控制器/模型的角度看,这个会是什么样子?从控制器/模型的角度看,这个会是什么样子?Rich,如果我走那条路,我该如何展示孩子的孩子?Rich,如果我走那条路,我该如何展示孩子的孩子?