2014-01-20 84 views
2

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

网格预期的模型与我的控制器中的模型匹配。我看过其他问题和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); 
} 

回答

10

您正在服务器上使用ToDataSourceResult()扩展方法,因此您需要使用结果的Data属性来分配给您在客户端上创建的DataSource对象的data属性。另外,你应该使用grid的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(); 
    } 
}); 
+1

谢谢!完美的作品,result.Data是我失踪。 – aw04

1

您所创建的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); 

这种方法是更可取的B/C它更灵活。

我希望有帮助!