如何使用从控制器传递的值检查 kendo 树视图中的复选框?

How to check the checkbox in kendo treeview using the values passed from the controller?

下面的代码从控制器

为 kendo 树视图生成节点

var datasource = new kendo.data.HierarchicalDataSource({
  transport: {
    read: function(options) {
      var id = options.data.ModuleId;
      $.ajax({
        url: '/MapModuleTask/LoadTreeView',
        dataType: "json",
        data: {
          id: id
        },
        success: function(result) {
          options.success(result);
        },
        error: function(result) {
          options.error(result);
        }
      });
    }
  },
  schema: {
    model: {
      id: "ModuleId",
      hasChildren: "hasChildren"
    }
  }
});

我想populate/check这些复选框使用我从控制器获得的 ID

这是我的控制器操作方法

public int?[] LoadModulesByFranchisorId(string FranchisorId)
    {
        int?[] modules;
        var modulesList = (from a in db.MapModuleFranchisors where a.FranchsiorId == FranchisorId && a.ModuleFlag == 1 select a.ModuleId).AsEnumerable().ToArray();
        modules = modulesList;
        return modules;
    }

我上面的action方法得到的id是复选框的id 提前谢谢你...:)

Controller Action 方法应该是这样的(即返回 Json 响应)。

 public JsonResult getModulesByFranchisorID(string FranchisorId)
    {
        var FranchisorModules = (from a in db.MapModuleFranchisors
                                 where a.FranchsiorId == FranchisorId && a.ModuleFlag == 1
                                 select new
                                 {
                                     a.ModuleId,
                                 }).AsEnumerable();
        return Json(FranchisorModules, JsonRequestBehavior.AllowGet);
    }

我在 ajax 'success' 语句中调用了以下方法。这选中了控制器返回值的复选框。

function checkNodes() {
  treeView = $("#treeview").data("kendoTreeView");
  var tpNodes = treeView.dataSource.view();
  var FranchisorId = '@Model.FranchisorId';

  $.ajax({
    type: "POST",
    url: "/MapModuleTask/getModulesByFranchisorID",
    data: {
      FranchisorId: FranchisorId
    },
    success: function(data) {
      var dataLength = data.length;
      console.log(dataLength);
      console.log(tpNodes);
      for (var i = 0; i < dataLength; i++) {

        for (j = 0; j < tpNodes.length; j++) {
          debugger;
          if (tpNodes[j].ModuleId == data[i].ModuleId) {
            debugger;
            var selectitem = treeView.findByUid(tpNodes[j].uid);
            selectitem.addClass('k-state-selected');
            treeView.select().find(".k-checkbox input").attr("checked", "true");

          }
        }
      }
    }
  });
}
可能有更好或更有效的方法,这对我有用。随时纠正我。 谢谢。