Asp.net mvc 带Kendo treeview的MVC-远程数据JSON或XML

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

我正在尝试创建一个从我的控制器(PropertyController)填充的剑道树视图

我陷入困境的部分是如何在控制器中格式化数据。我如何创建一个三个项目的树状视图,并将其传递给我的视图以显示在树状视图中

@(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,如果我走那条路,我该如何展示孩子的孩子?