0

好的,所以我在这里遇到了这种情况:

一个带有剑道树的 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);
                        },
                    });
                }
            });

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

非常感谢。

4

2 回答 2

1

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

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

它对我的情况有所帮助:)

于 2013-07-02T10:35:26.463 回答
0

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

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

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

    WorkedHoursDataSource.read();
}
于 2015-08-27T13:33:31.813 回答