0

コントローラ(PropertyController)から入力される剣道ツリービューを作成しようとしています。

私が立ち往生している部分は、コントローラーでデータをフォーマットする方法です。3つのアイテムの深さのツリービューを作成し、それをビューに渡してツリービューに表示するにはどうすればよいですか?

@(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);
    }
4

2 に答える 2

3

差出人:剣道サイト

<%= Html.Kendo().TreeView()
    .Name("TreeView")
    .BindTo(Model, mapping => mapping
    .For<Customer>(binding => binding
    .Children(c => c.Orders) // The "child" items will be bound to the the "Orders" property
    .ItemDataBound((item, c) => item.Text = c.ContactName) // Map "Customer" properties to TreeViewItem properties
    )
    .For<Order<(binding => binding
    .Children(o => null) // "Orders" do not have child objects so return "null"
    .ItemDataBound((item, o) => item.Text = o.OrderID.ToString()) // Map "Order" properties to TreeViewItem properties
    )
    )
    %>
于 2012-12-12T16:57:21.370 に答える
2

エンティティをたとえば「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);
                                           }
                                       }
                                   });
              }
         }
   )
   )

親よりも使いやすいので、子を使用しました。そのため、エンティティを次のように変更します。

    var entity4 = new Entity
    {
        Id = 1,
        Name = "LLC-D",
        Children = <list of children names ... >
    };

ここで私がどのように私のことをしたかを見ることができます:RavenDBドキュメントでKendoUIツリービューを作成します

お役に立てれば。


応答として編集:子供の子供を表示するにはどうすればよいですか?


私はあなたが説明したのと同じ問題に遭遇しました(子供の子供を表示する)。子供の子供を表示する問題が発生した後、これをどのように実行したかを次に示します。

私はEntityFrameworkを使用しました:

DBコンテキストクラス:

public class EntityDBContext : DbContext
{
    public DbSet<MyEntity> Entities { get; set; }
}

コントローラ:

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);
    }

そしてビュー:

 @(Html.Kendo().TreeView()
      .Name("treeview")
      .DataTextField("Name")
      .LoadOnDemand(true)
      .HighlightPath(true)
      .DataSource(dataSource => dataSource
                                    .Read(read => read
                                    .Action("EntitiesForTreeView", "SiteMap")
                                    )
      )
      .Checkboxes(true)
    )

お役に立てれば。愚かなことがあれば申し訳ありません。私はWeb開発を3か月しか行っていないので、必要に応じて回答のマークを外してください。さらにサポートが必要な場合はお知らせください。PS:上記のソリューションを実装した後、子があるかどうかに関係なく、ツリー上のすべてのノードに「+」記号が付いていることに気付きました。これを修正する方法を知っているなら、私に知らせてください:)

于 2012-12-14T14:57:15.603 に答える