【问题标题】:Javascript error when grouping in Kendo Grid with AJAX使用 AJAX 在 Kendo Grid 中分组时出现 Javascript 错误
【发布时间】:2015-04-11 01:59:44
【问题描述】:

我在 ASP.NET MVC 视图中有一个使用 AJAX 填充的 Kendo 网格,当我尝试按属性 FacturasCabecera.NFactura 进行分组时,我收到 Javascript 错误 d.ArtFacturasCabecera is undefined,因此 Kendo 网格挂起。网格中模型的元素之一是 FacturasCabecera,它是另一个模型对象,其中包含我要分组的属性。 Razor 视图中的网格代码是:

@(Html.Kendo().Grid<Macromed.Models.ArtFacturasDetalleModels>()
    .Name("GridAuditoria")
    .Columns(
        columns =>
        {
            columns.Bound(e => e.ArtFacturasCabecera.Nfactura).Title("Nro. Factura").Groupable(true);
            columns.Bound(e => e.ArtFacturasCabecera.FchFactura).Title("Fecha Factura").ClientTemplate("#= kendo.toString(kendo.parseDate(ArtFacturasCabecera.FchFactura), 'dd MMM yyyy') #").Groupable(false);
            columns.Bound(e => e.NItem).Title("Nro. Item").Groupable(false);
            columns.Bound(e => e.Codigo).Title("Código").Groupable(false);
            columns.Bound(e => e.ArtFacturasCabecera.FchPago).Title("Fecha pago").ClientTemplate("#= kendo.toString(kendo.parseDate(ArtFacturasCabecera.FchPago), 'dd MMM yyyy') #").Groupable(false);
            columns.Bound(e => e.ArtFacturasCabecera.FchVencimiento).Title("Fecha vencimiento").ClientTemplate("#= kendo.toString(kendo.parseDate(ArtFacturasCabecera.FchVencimiento), 'dd MMM yyyy') #").Groupable(false);
            columns.Bound(e => e.MontoFacturado).Title("Monto Facturado").ClientTemplate("#= kendo.toString(MontoFacturado,'c')#").Groupable(false);
            columns.Bound(e => e.AuditoriaDetalle.MontoTeorico).Title("Monto Teorico").ClientTemplate("#= kendo.toString(AuditoriaDetalle.MontoTeorico,'c')#").Groupable(false);
            columns.Bound(e => e.IdTraslado).Title("").ClientTemplate(@Html.ActionLink("Ajustar traslado", "AjustarTraslado",
            new { id = "#=IdTraslado#", idFactura = "#=IdFactura#", NItem = "#=NItem#", fechadesde = ViewBag.fechadesde, fechahasta = ViewBag.fechahasta }).ToHtmlString());
        })
    .Groupable(group => group.Enabled(true).Messages(mm => mm.Empty("Arrastre un Encabezado de Columna y Colóquela aquí para Agrupar")))
    .DataSource(
        datasource => datasource.Ajax()
                .PageSize(10)
                .Read(read => read.Action("GetFacturaAjustar", "AuditoriaTraslados", new { id = ViewBag.id, fechadesde = ViewBag.fechadesde, fechahasta = ViewBag.fechahasta }))
                .Model(model =>
                {
                    model.Id(p => p.IdFactura);
                    model.Field(p => p.ArtFacturasCabecera.FchFactura);
                }))
)

这是从数据库中获取数据的代码如下:

IQueryable<ArtFacturasDetalleModels> objfactura = from facturadet in db.ArtFacturasDetalle
  from facturacab in db.ArtFacturasCabecera
  from auditoriadet in db.AuditoriaDetalle
  from itemauditoria in db.AuditoriaDetalleItems
  where facturacab.IdFactura == facturadet.IdFactura
  && facturacab.IdFactura == auditoriadet.IdFactura &&
  facturacab.IdFactura == itemauditoria.IdFactura &&
  auditoriadet.IdAuditoria == itemauditoria.IdAuditoria &&
  facturadet.NItem == itemauditoria.NItem
  && facturacab.IdPrestador == id &&
  auditoriadet.Auditado == "S" && auditoriadet.Ajustar == "S" &&
  itemauditoria.ItemAuditado == true && itemauditoria.AjustarItem == true
  select new ArtFacturasDetalleModels
  {
      IdFactura = facturadet.IdFactura,
      NItem = facturadet.NItem,
      Codigo = facturadet.Codigo,
      MontoFacturado = facturadet.MontoFacturado,
      IdTraslado = facturadet.IdTraslado,
      ArtFacturasCabecera = new ArtFacturasCabeceraModels
      {
          IdPrestador = facturacab.IdPrestador,
          FchFactura = (DateTime)facturacab.FchFactura,
          FchPago = facturacab.FchPago,
          FchVencimiento = facturacab.FchVencimiento,
          Nfactura = facturacab.Nfactura
      },
      AuditoriaDetalle = new AuditoriaDetalleModels
      {
          IdAuditoria = auditoriadet.IdAuditoria,
          IdFactura = facturadet.IdFactura,
          MontoTeorico = auditoriadet.MontoTeorico
      }
  };
DataSourceResult result1 = objfactura.ToDataSourceResult(request1);
return Json(result1);

我怀疑剑道网格无法正确处理这种模型......

【问题讨论】:

  • 有什么方法可以将代码缩减为只是什么是相关的?
  • 我删减了一些代码,但我仍然保留了大部分代码,以便您了解模型的结构。
  • ToDataSourceResult() 将执行组查询,检查result1 并查看模型是否已正确创建。
  • ToDataSourceResult 正确创建模型。
  • 您是否尝试过简化模型而不在其中嵌套对象?

标签: javascript kendo-ui kendo-grid kendo-asp.net-mvc


【解决方案1】:

制作没有嵌套的新模型解决了这个问题。我猜剑道网格不适用于嵌套模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2021-10-10
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多