4

我很难让数据显示在我的 Kendo.Grid 上。

JSON 是有效的,它在单击链接时显示为文本,但在网格中加载数据。

这是来源,任何帮助将不胜感激!

br。埃罗

控制器

public ActionResult Index([DataSourceRequest]DataSourceRequest  request)
    {
        using (var db = new CimDataContext())
        {
            IQueryable<Customer> customers = db.Customers;
            DataSourceResult result = customers.ToDataSourceResult(request);
            return Json(result, "text/x-json", JsonRequestBehavior.AllowGet);
        }
    }

索引.cshtml

@(Html.Kendo().Grid<KendoUIMvcCim.Models.Customer>()
  .Name("grid")
  .DataSource(dataSource => dataSource 
      .Ajax() 
      .Read(read => read.Action("Index", "Customer")) 
   )
  .Columns(columns =>
  {
      columns.Bound(customer => customer.Id);
      columns.Bound(customer => customer.Name);
      columns.Bound(customer => customer.Number);
      columns.Bound(customer => customer.AgentID);
      columns.Bound(customer => customer.Info);
      columns.Bound(customer => customer.Email);
      columns.Bound(customer => customer.StartTime);
      columns.Bound(customer => customer.EndTime);
      columns.Bound(customer => customer.Category);
  })
  .Pageable() 
  .Sortable() 

)

浏览器上的结果

{"Data":[{"Id":2,"Name":"Name1","Number":"040000000","AgentID":"1","Info":"info1","Email":"email1","StartTime":"\/Date(1360101600000)\/","EndTime":null,"Category":"Laser"},{"Id":3,"Name":"Name2","Number":"0400000000","AgentID":"2","Info":"info2","Email":"email2","StartTime":"\/Date(1360188000000)\/","EndTime":null,"Category":"Kaihi"}],"Total":2,"AggregateResults":null,"Errors":null}
4

3 回答 3

5

我认为问题在于您的操作方法返回一个 JSON 字符串,而您的视图需要一个KendoUIMvcCim.Models.Customer. 在控制器中使用两种不同的操作方法来解决这个问题:

  1. 第一个操作返回一个 ViewResult 并且是 View 所需要的

    public ViewResult Index()
    {
      using (var db = new CimDataContext())
      {
        IQueryable<Customer> customers = db.Customers;
        return View(customers);
      }
    }
    
  2. 第二个动作返回 ActionResult 并且您的网格需要通过 AJAX 调用来填充它。

    public ActionResult Customers_Read([DataSourceRequest]DataSourceRequest request)
    {
      using (var db = new CimDataContext())
      {
        IQueryable<Customer> customers = db.Customers;
        DataSourceResult result = customers.ToDataSourceResult(request);
        return Json(result, "text/x-json", JsonRequestBehavior.AllowGet);
      }
    }
    

在您的Index.cshtml文件中,您最终需要更改该.Read行,以便您在控制器中调用正确的操作方法。

  .DataSource(dataSource => dataSource 
      .Ajax() 
      .Read(read => read.Action("Customers_Read", "Customer")) 
   )
于 2013-08-27T09:33:37.973 回答
2

我知道这是一篇旧帖子,但对于仍在苦苦挣扎的人来说:

如果您从 Kendo 文档中复制/粘贴,请确保不要包含 jquery 2 次,因为您的文件中可能已经包含它。

也就是说,将 jQuery 引用放在页面的 HEAD 中,而不是底部,否则 kendo 网格将在实际导入之前尝试使用 jQuery 呈现。

希望这可以帮助

于 2015-09-01T10:44:39.970 回答
1

最终工作代码:

控制器

public ViewResult Index()
    {      
            return View();
    }

    public ActionResult Customers_Read([DataSourceRequest]DataSourceRequest request)
    {
        using (var db = new CimDataContext())
        {
            IQueryable<Customer> customers = db.Customers;
            DataSourceResult result = customers.ToDataSourceResult(request);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }

索引.cshtml

@(Html.Kendo().Grid<KendoUIMvcCim.Models.Customer>()
  .Name("grid")
  .DataSource(dataBinding => dataBinding.Ajax().Read(read => read.Action("Customers_Read", "Customer")))
  .Columns(columns =>
  {
      columns.Bound(customer => customer.Id);
      columns.Bound(customer => customer.Name);
      columns.Bound(customer => customer.Number);
      columns.Bound(customer => customer.AgentID);
      columns.Bound(customer => customer.Info);
      columns.Bound(customer => customer.Email);
      columns.Bound(customer => customer.StartTime);
      columns.Bound(customer => customer.EndTime);
      columns.Bound(customer => customer.Category);
  })
  .Pageable() 
  .Sortable() 

)

于 2013-08-27T15:46:28.833 回答