【问题标题】:Unable to set Kendo UI Grid DataSource无法设置 Kendo UI 网格数据源
【发布时间】:2014-02-10 07:43:07
【问题描述】:

我正在对工作中的 Kendo UI 网格进行添加,以允许它根据从文本框传入的 id 进行更新。我从 ajax 调用我的控制器,一切都按预期工作,直到我尝试在 ajax 成功中为我的网格创建kendo.data.DataSource()result 看起来与预期的一样,但我将其分配给数据源的任何操作似乎都不起作用。数据没有显示任何内容,并且网格显示为空。

网格预期的模型与我的控制器中的模型匹配。我查看了其他问题和 kendo ui 文档,但我似乎无法弄清楚我做错了什么......任何帮助将不胜感激。

阿贾克斯:

$.ajax({
    type: "POST",
    url: '@Url.Action("Search")',
    data: JSON.stringify({ id: id }),
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (result) {
        var grid = $("#Grid").data("kendoGrid");
        var data = new kendo.data.DataSource(result);
        grid.dataSource.data(data);
        grid.refresh();
    }
});

控制器:

public ActionResult Search([DataSourceRequest]DataSourceRequest request, string id)
{
    IEnumerable<SearchModel> data = GetData(id);

    return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

【问题讨论】:

    标签: ajax asp.net-mvc kendo-ui


    【解决方案1】:

    您正在服务器上使用 ToDataSourceResult() 扩展方法,因此您需要使用 result 的 Data 属性来分配您在客户端上创建的 DataSource 对象的 data 属性。此外,您应该使用网格的 setDataSource 方法而不是 grid.dataSource.data()。最后,您要调用 dataSource 网格属性的 read() 方法,而不是 grid.Refresh()。

    $.ajax({
        type: "POST",
        url: '@Url.Action("Search")',
        data: JSON.stringify({ id: id }),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            var grid = $("#Grid").data("kendoGrid");
            var dataSource = new kendo.data.DataSource({
                data: result.Data
            });
            grid.setDataSource(dataSource);
            grid.dataSource.read();
        }
    });
    

    【讨论】:

      【解决方案2】:

      您错误地创建了DataSource。假设您的 AJAX 调用的结果返回一个数组,那么您必须将其包装在一个具有 data 属性的对象中,该属性包含数据数组。

      $.ajax({
          // ...
          success: function (result) {
              var grid = $("#Grid").getKendoGrid();
              var data = new kendo.data.DataSource({ data: result });
              grid.dataSource.data(data);
              grid.refresh();
          }
      });
      

      以下是创建DataSource 的另一种方法,它允许传入一个数组(展开)、一个DataSource 配置对象,甚至是一个预先存在的DataSource 对象。

      var data = kendo.data.DataSource.create(obj);
      

      这种方法更可取,因为它更灵活。

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-01
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-14
        • 2013-07-15
        • 1970-01-01
        相关资源
        最近更新 更多