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 DataSource の要求データを変更する関数を呼び出しています。

変更後、データソースのハンドラーを呼び出して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 に答える