【问题标题】:kendo treeview with new data source具有新数据源的剑道树视图
【发布时间】:2013-06-16 14:21:47
【问题描述】:

好的,所以我这里有这种情况:

一个带有剑道树的 CSHTML 视图:

@(Html.Kendo().TreeView()
.Name("treeview")
.DataTextField("Name")
.DataSource(d => d.Read(r => r.Action("WorkedHours", "TaskManager")))
.Events(e => e.Select("onSelect"))
)

右侧有一个剑道网格。在树的上方有一个(剑道)下拉列表来选择用户。

这是树调用的控制器方法:

 public JsonResult WorkedHours(uint? id)
    {
        DocObjectArray docObjects = null;
        if (id == null)
        {
            // get root elements
            var loggedInUserRef = OmanagerUtils.GetInstance().LoggedInUser;
            if (loggedInUserRef != null && loggedInUserRef.GetObject() != null && loggedInUserRef.GetObject().SubObjects != null)
            {
                for (int i = 0; i < loggedInUserRef.GetObject().SubObjects.GetLength(); i++)
                {
                    var item = loggedInUserRef.GetObject().SubObjects.GetAt(i);
                    if (item.ToString() == TaskManagerConstants.UserWorkHours)
                    {
                        docObjects = item.TreeSubObjects;
                        break;
                    }
                }
            }
        }
        else
        {
            // get sub objects of a root object
            var rootObj = new DocObjectRef((int)id);
            docObjects = rootObj.GetObject().TreeSubObjects;
        }
        var returnDocObjects = new List<OmanagerItem>();

        for (int i = 0; i < docObjects.GetLength(); i++)
        {
            var item = docObjects.GetAt(i);
            var hasChildren = true;
            if (item.TreeSubObjects == null)
            {
                hasChildren = false;
            }
            else
            {
                if (item.TreeSubObjects.GetLength() == 0)
                {
                    hasChildren = false;
                }
            }
            var listItem = new OmanagerItem
            {
                hasChildren = hasChildren,
                id = item.GetOID(),
                Name = item.ToString()
            };
            returnDocObjects.Add(listItem);
        }
        return Json(returnDocObjects, JsonRequestBehavior.AllowGet);
    }

现在,问题是我必须能够从下拉列表中选择一个用户并用这些新数据刷新树。

$("#employee").kendoDropDownList({
                change: function () {
                    var postdata = {
                        id:$("#employee").val()
                    }
                    $.ajax({
                        url: "TaskManager/WorkedHours",
                        cache: false,
                        type: "POST",
                        data: postdata,
                        success: function (data) {
                            $("#treeview").data("kendoTreeView").setDataSource(data);
                        },
                    });
                }
            });

问题是我如何处理这些数据?因为我的尝试并没有真正奏效。

非常感谢。

【问题讨论】:

    标签: json treeview kendo-ui datasource


    【解决方案1】:

    您可以在 WorkedHours 操作中使用 OutputCache 属性:

    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
    public JsonResult WorkedHours(uint? id)
    {
     // rest of method
    }
    

    这对我有帮助:)

    【讨论】:

      【解决方案2】:

      也许这个小sn-p对你有帮助。 与您在我的下拉列表的更改事件中的代码类似,我正在调用一个函数,该函数将更改我的 TreeView 数据源的请求数据。

      更改后,它调用数据源的read()处理程序,重新读取数据:

      function loadTreeViewData() {
          var employee = $('#employee').getKendoDropDownList().dataItem();
          WorkedHoursDataSource.transport.options.read.data = {Employee_Id:employee.id};
      
          WorkedHoursDataSource.read();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-30
        • 2016-08-18
        • 2017-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多