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

时间:2015-10-07 09:49:31

标签: javascript c# jquery kendo-ui kendo-treeview

下面的代码从控制器

生成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"
    }
  }
});




我想使用我从控制器获取的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;
    }

The Ids'我从上面的行动方法得到的是Ids'的复选框 提前谢谢你...... :)

1 个答案:

答案 0 :(得分:1)

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");

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