Kendo UI treeList在扩展节点上多次调用控制器动作?

时间:2016-06-15 12:27:54

标签: c# .net asp.net-mvc asp.net-mvc-4 kendo-ui

  

以下是作为JSON返回给kendo树的代码/数据   清单:

 var item = new IncomeStatementHierarchyItemModel()
                        {
                            id = GroupId,
                            parentid = Id.Value,
                            HasIndent = 0,
                            Title = drow[2].ToString(),
                            Actual = GetDataRowValueForPSA(dt, drow[2].ToString(), 3, 2),
                            Prior = GetDataRowValueForPSA(dt, drow[2].ToString(), 4, 2),
                            Budget = GetDataRowValueForPSA(dt, drow[2].ToString(), 5, 2),
                            Forecast = GetDataRowValueForPSA(dt, drow[2].ToString(), 6, 2),
                            PriorQuarter = GetDataRowValueForPSA(dt, drow[2].ToString(), 7, 2),
                            PSAClassification = psaClassification,
                            hasChildren = true
                        };
  

Id和parentId在将数据绑定到之后正确设置为树   树再次控制器动作被调用后续项目。

     

传输功能用于创建数据源:

var drillDownDataSource = new kendo.data.TreeListDataSource({
        transport: {
            read: {
                url: urlAction,
                dataType: "json",
                type: "POST",
                async: true,
                cache: true,
                autoBind: true,
                data: function () { 

1 个答案:

答案 0 :(得分:1)

因为父ID对剑道树来说意味着太多,所以你需要做的就是让剑道树以正确的方式运作。

1.您需要一个看起来像这样的模型:

    public class KendoTreeViewItem 
    { 
        //required properties:
        //property names are lower case because I am planning to convert to   
     //javascript array and at that point kendo is looking for lower case   properties.
      public string id { get; set; }
      public bool expanded { get; set; }
      public bool @checked{get; set; }
      public IList<KendoTreeViewItem> Items{get;set;}
      public string text{ get; set; }
      public bool hasChildren{get;set;}
      public bool hasChildren{get;set;} 
       //Add other custom properties         
    }

2.正如我上面提到的,ParentId在kedno树上并不太重要,但是我们将使用它从平面列表构建一个将由剑道树使用的真实树结构。 < / p>

如果您已经拥有此功能,请跳过此步骤。 你可以使用类似的东西:

 public static class KendoTreeHelpers
    {
        public static List<KendoTreeViewItem> ToKendoTree(this IList<KendoTreeViewItem> flatList)
        {
            Dictionary<long, KendoTreeViewItem> dic = flatList.ToDictionary(n => n.ItemId, n => n);
            var rootNodes = new List<KendoTreeViewItem>();
            foreach (var node in flatList)
            {
                if (String.IsNullOrEmpty(node.ChildrenIds))
                {
                    node.Items = null;
                }
                if (node.ParentId.HasValue)
                {
                    var parent = dic[node.ParentId.Value];
                    node.ParentId = parent.ItemId;
                    parent.Items.Add(node);
                }
                else
                {
                    rootNodes.Add(node);
                }
            }
            return rootNodes;
        }
    }

3.因此,您在控制器中的方法应如下所示:

 public ActionResult DisplayTree()
        {
            IList<KendoTreeViewItem> flatList = GetFlatList();//your method to get list.
            IList<KendoTreeViewItem> tree = flatList.ToKendoTree();
            return View(tree);
        }

<强> 4.View

@model IList<KendoTreeViewItem>

 <div id="treeview">

                        </div>

<script type="text/javascript">
        jQuery(document).ready(function() {
            $("#treeview").kendoTreeView({
                template: kendo.template($("#treeview-template").html()),
                dataSource: new kendo.data.HierarchicalDataSource({
                    data: @Html.Raw(Json.Encode(Model)),
                    schema: {
                        model: {
                            children: "Items"
                        }
                    }
                }),             

            });
        });

使用此功能,您将获得所需内容,请注意,您所描述的行为是ajax bin ding的正常行为