2

我已经为我的每个树节点分配了一个 ID 属性,以在控制器上保存我需要的信息,以便我可以保存修改后的层次结构。

但是,当我删除一个节点时,会删除 Id 属性。我不确定这是否是一个错误,如果我做错了什么,或者这是否按照开发人员的预期工作。

我附上了我的警报窗口的屏幕截图(下面的代码),以及从 Firebug 生成的 Html 的两张照片。一个在 Drop 之前,一个在 Drop 之后。

@(Html.Kendo().TreeView()
.Name("CompanyHierarchy")
.Events(events => events
    .DragEnd("HierarchyDragEnd")
)
.BindTo(Model.Hierarchy as System.Collections.IEnumerable, mappings =>
{
    mappings.For<Models.EnterpriseChildModel>(binding => binding
        .Children(c => c.Children)
        .ItemDataBound((item, c) =>
        {
            item.Text = c.Name;
            item.HtmlAttributes.Add("Id", c.EnterpriseID.ToString());
        })
    );
})
.DragAndDrop(true))

警报窗口缺少 ID Firebug 在丢弃之前在 Html 上显示 ID Firebug 在 Html 中显示缺少 ID 丢弃后

4

1 回答 1

1

我有一个解决方案。它是由 Telerik 团队成员在 Kendo 论坛上提供的。我也会在下面发布我修改后的代码:

拖放操作后,HtmlAttributes 不会保留。在这种特殊情况下,最好将 Id 添加到项目并通过客户端上的 dataItem 方法访问它。

修改后的代码:

将 ID 添加到 dataItem:

    @(Html.Kendo().TreeView()
    .Name("CompanyHierarchy")
    .Events(events => events
        .DragEnd("HierarchyDragEnd")
    )
    .BindTo(Model.Hierarchy as System.Collections.IEnumerable, mappings =>
    {
        mappings.For<Models.EnterpriseChildModel>(binding => binding
            .Children(c => c.Children)
            .ItemDataBound((item, c) =>
            {
                item.Text = c.Name;
                item.Id = c.EnterpriseID.ToString();
            })
        );
    })
    .DragAndDrop(true)
)

从 dataItem 获取信息:

        function HierarchyDragEnd(e) {
        setTimeout(function () {
            var originDataItem = $("#CompanyHierarchy").data('kendoTreeView').dataItem(e.sourceNode);
            var originNodeId = originDataItem.id;
            var originNodeText = originDataItem.text;
            var destinationDataItem = $("#CompanyHierarchy").data('kendoTreeView').dataItem(e.destinationNode);
            var destinationNodeId = destinationDataItem.id;
            var destinationNodeText = destinationDataItem.text;

            var dropPosition = e.dropPosition;
        }, 100);
    }
于 2012-10-05T14:56:14.123 回答